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]