[ABC454] ABC 454(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
-
R - L + 1です.
A.py
"""
<方針>
- `R - L + 1` です.
"""
# 入力
L, R = map(int, input().split())
# 計算
ans = R - L + 1
# 出力
print(ans)
B問題
-
setを使うと楽そう.
B.py
"""
<方針>
- `set` を使うと楽そう.
"""
# 入力
N, M = map(int, input().split())
F = set(map(int, input().split()))
# 全員違う服
if(len(F) == N):
print("Yes")
else:
print("No")
# 全部の服が着られてる
if(len(F) == M):
print("Yes")
else:
print("No")
C問題
方針
- 探索すりゃいんでしょ.
- グラフ作ろうぜ.グラフ.
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- 探索すりゃいんでしょ.
- グラフ作ろうぜ.グラフ.
"""
N, M = map(int, input().split())
# E[i] = {j_0, j_1...}として,iを渡すとjというアイテムがゲットできる
E = [set() for _ in range(N+1)]
for _ in range(M):
a, b = map(int, input().split())
E[a].add(b)
# 取得したアイテム一覧
items = [False]*(N+1)
items[1] = True
q = [1] # 今持ってるアイテム
while q:
u = q.pop() # 探索
# まだ持ってないアイテムをもらう
for v in E[u]:
if(not items[v]):
items[v] = True
q.append(v)
print(items.count(True))
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- ぴえん