君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Beta Round #16 (Div. 2 Only)

はい。最終更新日:2014/05/08
http://codeforces.com/contest/16

A. Flag

implementation

ざっくりと大意

・なんか新しい決まり事で国旗が横縞の模様でないといけないことになるらしい
・横列一直線の中に違う模様が混ざるのと、二列同じ模様が続くのはNO

方針のようなもの

・一列目は違う模様が混ざってないか判定
・二列目以降は違う模様が混ざってないかと、上の列と同じ模様になってないかを判定

(n,m)=map(int, raw_input().split())
l=[list(raw_input()) for _ in range(n)]
ans='YES'
for i in range(n):
    if i==0 and l[0].count(l[0][0])!=len(l[0]):
        ans='NO'
        break
#最終列
    elif i>0 and i==n-1:
        if l[-1].count(l[-1][0])!=len(l[-1]):
            ans='NO'
        elif l[-1][0]==l[-2][0]:
            ans='NO'
    elif i>0 and l[i].count(l[i][0])!=len(l[i]):
        ans='NO'
        break
    elif i>0 and l[i][0]==l[i-1][0]:
        ans='NO'
        break
print (ans)

そろそろ3系に移行しようとしたら色々エラーでダメでした。

328937のAntonDubovikさん。

n,m=map(int,raw_input().split())
p='x'
ok=1
for i in range(0,n):
    s = raw_input()
    if len(set(list(s))) != 1 or s[0] == p:
        ok=0
        break
    p = s[0]
print "YES" if ok else "NO"

同列内に違う模様が混ざってないかの判定にset型にしてlenが1よりで大きいかで判定してた。あと前列との比較は一行受けとりながら保存で比較してた。最初は'x'が代入されているので一列目は何が来ても大丈夫なように。

2636064のdaidailanlanさん

n, m = map(int, raw_input().split())
b = [raw_input() for _ in range(n)]
print ['NO', 'YES'][all(len(set(r)) < 2 for r in b) and all(b[i - 1] != b[i] for i in range(1, n))]

B. Burglar and Matches

greedy,implementation,sortings

ざっくりと大意

・burglarさんが持ち出せる限度の中で最も効率が良いのを??
・nが持ち出せる限度量、aが量、bが価値??

方針のようなもの

・価値の高い順にソートして、そこから制限量になるまで持ちだしている価値を加算する

l=[]
chk,ans=0,0
(n,m)=map(int, raw_input().split())
for _ in range(m):
    i=map(int, raw_input().split())
    l.append(i)
l1=sorted(l, key=lambda l:l[1])
l1.reverse()
for i in l1:
    if n==chk: break
    elif n>=chk+i[0]:
        ans+=i[0]*i[1]
        chk+=i[0]
    else:
        ans+=(n-chk)*i[1]
        chk+=(n-chk)
print ans

lambdaを使うんでなくてa,bで受け取ってappendはb,aという方法もあったらしい。

v = []
for i in xrange(M):
   a, b = map(int, stdin.readline().split())
   v.append((b, a))
v.sort()
v.reverse()

ソートさえ終わればreverseは必要なかったかも。forでリストの-1番目からを-1ずつみていけばよかった。

C. Monitor

binary search,number theory

ざっくりと大意

・a,bが今の画面サイズ?で、それをx:yの比率にしたい??
・a,bは与えられた数より大きくは出来ないので小さくする方に調整してx:yの比率にする
・調整後の画面サイズか出来ない場合は0 0を出力

方針のようなもの

・a,bそれぞれをx,yで割り切れるかチェック、割り切れなければ余りを引く ・比率を最大公約数で割る(初回提出はこれに気付かなかった)
・画面サイズ/比率で倍率?を求めて小さい方を基準にする

(a,b,x,y)=map(int, raw_input().split())
if x-y:
    c,k=max(x,y),min(x,y)
    while c%k:
        c,k=k,c%k
if k!=1:
    x/=k
    y/=k
if a%x:
    a-=a%x
if b%y:
    b-=b%y
if a==0 or b==0:
    print '0 0'
    exit()
ax=a/x
by=b/y
if ax<by:
    print a,y*ax
else:
    print x*by,b