😸
AtCoder ABC204 個人的メモ
所感
abc3完
A - Rock-paper-scissors
if文でおk
x, y = map(int, input().split())
res = {x, y}
if 0 not in res and len(res) == 2:
print(0)
if 1 not in res and len(res) == 2:
print(1)
if 2 not in res and len(res) == 2:
print(2)
if len(res) == 1:
print(x)
x, y = map(int, input().split())
if x == y:
print(x)
else:
print(*{0, 1, 2} ^ {x, y})
B - Nuts
forループですべての木において、その木が条件を満たしているかを判定すればおk
N = int(input())
A = list(map(int, input().split()))
ans = 0
for a in A:
if a <= 10:
continue
ans += a - 10
print(ans)
C - Tour
DFS
都市の組み合わせは全部で
スタートする都市を固定すると、到達可能な都市はDFSで求められる。
計算量は全ての都市を考えるのに
再帰上限を変え忘れてre
from sys import setrecursionlimit
setrecursionlimit(4000)
def dfs(node: int):
if visited[node]:
return
visited[node] = 1
for n_node in E[node]:
if visited[n_node]:
continue
dfs(n_node)
return
N, M = map(int, input().split())
E = [[] for _ in range(N)]
for _ in range(M):
a, b = map(int, input().split())
E[a - 1].append(b - 1)
ans = 0
for i in range(N):
visited = [0] * N
dfs(i)
ans += sum(visited)
print(ans)
c参考
再帰関数の計算量
D - Cooking
N = int(input())
T = list(map(int, input().split()))
# i番目までの料理で、料理の時間が丁度j分となる組み合わせが存在するか?
dp = [1] + [0] * sum(T)
for t in T:
next_dp = list(dp)
for i in range(len(dp)):
if dp[i]:
next_dp[i + t] = 1
dp = list(next_dp)
print(dp[len(dp) // 2:].index(1) + len(dp) // 2)
d参考
部分和問題
Discussion