hirohirohirohirosのブログ

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

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]))