roiti46's blog

主に競プロ問題の解説を載せてます

Codeforces #294 Div.2 A: A and B and Chess & B: A and B and Compilation Errors

いつもより簡単めの問題セットだった気がする。ABCを解いて600位ぐらい。D問題は特別難しいものじゃなかったのでもったいないことをした。1677 → 1667 (-10)。

問題はこちら

A: A and B and Chess

チェスボードが与えられる。駒得を計算し、白と黒どちらが有利かを答えよ。

解法

問題文の条件通りに駒得を計算していく。knightとkingの扱いに注意。

pt = {"Q":9, "q":9, "R":5, "r":5, "B":3, "b":3,
        "N":3, "n":3, "P":1, "p":1, "K":0, "k":0}
w = b = 0
for loop in xrange(8):
    line = raw_input()
    for i in line:
        if i == ".": continue
        if i.isupper(): w += pt[i]
        else:           b += pt[i]
if   w > b: print "White"
elif b > w: print "Black"
else:       print "Draw"

B: A and B and Compilation Errors

コンパイルエラーの結果を3行与えられる。エラーは番号で通知され、各エラーは互いに独立であるとする。同じエラー番号が複数ある場合もある。2行目では1行目から1つ、3行目でも2行目から1つ、エラーが減っている。デバッグに成功したエラー番号をそれぞれ答えよ。

解法

与えられた数列をソートして、前から順番に比較していく。異なるものがあればそれがフィックスされたエラー番号である。番兵(-1など)を数列の一番後ろにおけばもう少しスマートな解答になると思います。

n = int(raw_input())
a = sorted(map(int,raw_input().split()))
b = sorted(map(int,raw_input().split()))
c = sorted(map(int,raw_input().split()))

for i in xrange(n-1):
    if a[i] != b[i]:
        print a[i]
        break
else:
    print a[-1]
for i in xrange(n-2):
    if b[i] != c[i]:
        print b[i]
        break
else:
    print b[-1]