hirohirohirohirosのブログ

地方国立大学に通う情報系学部4年

Atcoder ABC252 振り返り

Cでてこずりまくったため,ACはできましたがレートは上げられませんでした…

A - ASCII code【AC】

 chr関数で文字コードから文字に,ord関数で文字から文字コードに変換できます。

print(chr(int(input())))
B - Takahashi's Failure【AC】

 max関数を使い食べる食品を見つけます.嫌いな食べ物Bの一つ一つに対して,そのおいしさをしらべ,食べる可能性のある食品だったら(=おいしさが最大の食品だったら)Yesをプリントします.for~elseを使い,一度もbreakしなかったら(=Yesとなるようなパターンがなかったら)Noをプリントします.

N, K = map(int, input().split())
A = [int(i) for i in input().split()]
B = [int(i)-1 for i in input().split()]

maxA = max(A)

for b in B:
    if A[b] == maxA:
        print("Yes")
        break
else:
    print("No")
C - Slot Strategy【AC】

 N<100でSは必ず10文字なので,どれだけ遅くてもtは必ず100以下です.つまり,tでシミュレーションしても十分間に合うということです.(これに気付くまでにだいぶ時間がかかってしまった…)
 t=1秒の時に0,1,2,...で揃うパターンはないか調べます.なかった場合t+=1としてwhile文を繰り返します.
for i, s in enumerate(S)で,i番目のリールsを取り出します.t秒目のリールsに表示されている値は問題文にもある通りs[t%10]です.この値をdicに追加し,dicにある値の個数がリールの数と等しくなったらすべて揃ったということなので,処理を抜けてtを表示します.

N = int(input())
S = [input() for _ in range(N)]
ans = 1<<60
t = 0
dic = {i:set() for i in range(10)}
ok = True

while ok:
    now = set()
    for i, s in enumerate(S):
        num = int(s[t%10])
        if i in dic[num]:
            continue
        if num in now:
            continue
        now.add(num)
        dic[num].add(i)
        if len(dic[num]) == N:
            ok = False
            break
    t += 1
print(t-1)