読者です 読者をやめる 読者になる 読者になる

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

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

Codeforces Round #294 (Div.2)

はい。
http://codeforces.com/contest/519

A. A and B and Chess

ざっくりと大意

・チェスので盤面上の各駒をポイント化して白と黒のポイントを比較する。
・ただし、入力では実際のチェスではありえない盤面が与えられる場合がある。

方針のようなもの

・盤面の端から端まで数えて比較する。

python

def cnt(x):
    n=m=0
    for p in x:
        for q in p:
            if q=='Q': n+=9
            elif q=='q': m+=9
            elif q=='R': n+=5
            elif q=='r': m+=5
            elif q=='B' or q=='N': n+=3
            elif q=='b' or q=='n': m+=3
            elif q=='P': n+=1
            elif q=='p': m+=1
    return (n,m)
boad=[]

for i in range(8):
    boad.append(raw_input())
w=cnt(boad)

print 'White' if w[0]>w[1] else 'Black' if w[0]<w[1] else 'Draw'

if分岐がすごい面倒で何か他に方法がないかと思ったら入力の文字列を全部繋げてそれぞれの文字をcount()で数えられるのは思いつかなかった。 http://codeforces.com/contest/519/submission/10932046

B. A and B and Compilation Errors

ざっくりと大意

・aにあったエラーでbではなくなってるものと、bにあったエラーでcではなくなってるものを特定する。
・aからbで1つだけ消えてることとbからcで1つだけ消えてることは保証される。

方針のようなもの

・要素を全部比較する。

python

n=int(raw_input())
a=map(int,raw_input().split())
b=map(int,raw_input().split())
c=map(int,raw_input().split())
a.sort()
b.sort()
c.sort()
for i in range(n):
    try:
        if a[i]!=b[i]:
            print a[i]
            break
    except IndexError:
        print a[i]
for i in range(n-1):
    try:
        if b[i]!=c[i]:
            print b[i]
            break
    except IndexError:
        print b[i]

それぞれの行をソートして比較して、もしも末尾になるものが消えてた場合は配列の長さが違ってエラーになるのをtry/exceptした。

C. A and B and Team Training

ざっくりと大意

・強いAと新人のBがいる。A2人とB1人かA1人とB2人のチームを作ってチーム数を最大化する。

方針のようなもの

・先にどちらかだけ優先して作った後で、優先したチームを減らしつつもう一方のチームを作っていけば最大が見つかるはずが上手く書けなかったので後で