ABC190 - Atcoder/Python精進のための解説メモ

カレンダーアイコン
2021/11/01

ABC190 - A.Very Very Primitive Game

AtCoder公式 | ABC190 - A.Very Very Primitive Game

解答

a, b, c = map(int, input().split())
print('Takahashi' if a + c > b else 'Aoki')

要点解説メモ

  • 先手後手のとき高橋くんが勝つ条件条件を考えてから、シンプルな条件に変えられないかを考える
  • c=0 のとき a>b, c=1 のとき a>=b なので a+c>b が成り立てば良いよねって感じ

ABC190 - B.Magic 3

AtCoder公式 | ABC190 - B.Magic 3

解答

n, s, d = map(int, input().split())
ans = 'No'
for _ in range(n):
    x, y = map(int, input().split())
    if x < s and y > d:
        ans = 'Yes'
print(ans)

要点解説メモ

  • シンプルに詠唱時間とダメージの両方が条件を満たすかどうかで比較する

ABC190 - C.Bowls and Dishes

AtCoder公式 | ABC190 - C.Bowls and Dishes

解答

import itertools
n, m = map(int, input().split())
aabb = [tuple(map(int, input().split())) for _ in range(m)]
k = int(input())
ccdd = [tuple(map(int, input().split())) for _ in range(k)]
ans = 0

for cd in itertools.product(*ccdd):
    balls = set(cd)
    cnt = sum(a in balls and b in balls for a, b in aabb)
    if ans < cnt:
        ans = cnt
print(ans)

別解

n, m = map(int, input().split())
aabb = [tuple(map(int, input().split())) for _ in range(m)]
k = int(input())
ccdd = [tuple(map(int, input().split())) for _ in range(k)]
ans = 0

for i in range(2 ** k):
    balls = []
    for j in range(k):
        if (i >> j) & 1:
            balls.append(ccdd[j][0])
        else:
            balls.append(ccdd[j][1])
    cnt = sum(a in balls and b in balls for a, b in aabb)
    if ans < cnt:
        ans = cnt
print(ans)

要点解説メモ

  • cdのどちらかを選ぶ組み合わせは、たかだか2**16=65536通りなので全通り試せば良い
  • cを0, dを1としてbitで処理しても良さそう

ABC190 - D.

AtCoder公式 | ABC190 - D.

解答

まだ解いていません

要点解説メモ