👌

Atcoder ABC409の備忘録

に公開

Atcoder ABC409の備忘録

ABC409 A問題

特に言うことなし

import sys
N = int(input())
T = input()
A = input()

for i in range(N):
    if T[i] == A[i] == "o":
        print("Yes")
        sys.exit()

print("No")

ABC409 B問題

解けたけど模範解答がよい感じだったから、読んで理解してみた
コード中のコメントの通り

N = int(input())
A = sorted(map(int, input().split()), reverse=True)
print(A)

for x in range(N, 0, -1):
    """
    A[x-1] は大きい順でx番目の値
    xはA[x-1]以上の値の要素数
    つまりA[x-1]がx以上なら、それが答え。
    考えられうる答えの最大値(N)から探索してるから、見つかった時点で抜け出せばOK
    """

    if A[x - 1] >= x:
        print(x)
        break
else:
    print(0)

ABC409 C問題

円を3等分する点を結べば正三角形になるっていうことに気づかないと解けないと思う
実装力というより、幾何学の知識問題?

from collections import Counter
N,L = map(int, input().split())
d = list(map(int, input().split()))

# 円を3等分する点を結べば正三角形になる
# 今回、各点は整数だから、そもそも3で割り切れなければ3等分できない円周になる。
if L % 3 != 0:
    print(0)
    exit()

# 各点を設定する
points_cnt = [1] + [0]*(L-1)
current_point = 1
for i in range(N-1):
    current_point = current_point + d[i]
    current_point = current_point%L
    points_cnt[current_point-1] += 1
    
result = 0
for i in range(L // 3):# 最初の0~120°の点を軸に探していけば良い
    result += points_cnt[i] * points_cnt[i + L // 3] * points_cnt[i + 2 * L // 3]

print(result)

ABC409 D問題

あとで

Discussion