Atcoder ABC245 振り返り
A - Good morning【AC】
始めに分に変換しておくとやりやすいです.
A, B, C, D = map(int, input().split()) print("Takahashi") if A*60+B <= C*60+D else print("Aoki")
B - Mex【AC】
set型はin操作がO(1)で出来ます.
N = int(input()) A = set([int(i) for i in input().split()]) for i in range(N+1): if i not in A: print(i) break
C - Choose Elements【AC】
公式解説では情報の管理をしていましたが,今回必要な情報は1つ前の情報のみで,公式解説でもdp[i-1]やep[i-1]しか使っていないので,変数で処理することも出来ます.A_seqは末尾をAに取ったとき成立するならTrue,しないならFalse.B_seqも同様に,Bに取ったとき成立するならTrue,しないならFalseとします.最初の一文字目は必ず成立するので両方ともTrueにします.後はN-1回繰り返し末尾に文字を取ったとき成立するならTrue,しないならFalseと繰り返します.最終的にA_seqかB_seqのどちらかがTrueになっていれば存在します.
N, K = map(int, input().split()) A = [int(i) for i in input().split()] B = [int(i) for i in input().split()] A_seq = True B_seq = True for i in range(1, N): if (A_seq and abs(A[i-1] - A[i]) <= K) or (B_seq and abs(B[i-1] - A[i]) <= K): nextA_seq = True else: nextA_seq = False if (B_seq and abs(B[i-1] - B[i]) <= K) or (A_seq and abs(A[i-1] - B[i]) <= K): nextB_seq = True else: nextB_seq = False A_seq, B_seq = nextA_seq, nextB_seq if A_seq or B_seq: print("Yes") else: print("No")
D - Polynomial division【AC】
N, M = map(int, input().split()) A = [int(i) for i in input().split()][::-1] C = [int(i) for i in input().split()][::-1] quo = [] for i in range(M+1): q = C[i] // A[0] for j in range(1, N+1): C[i+j] -= q*A[j] quo.append(str(q)) print(" ".join(quo[::-1]))