[ABC452] ABC 452(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
- 五節句を全部保持しておこう.変に奇数とか同じ数字とかの条件は個人的にはNG
A.py
"""
<方針>
"""
# 入力
M, D = map(int, input().split())
# 五節句を辞書で保持しておく
gothec = {
(1, 7),
(3, 3),
(5, 5),
(7, 7),
(9, 9),
}
# 出力
if((M, D) in gothec):
print("Yes")
else:
print("No")
B問題
- 全部黒に塗っておく.
- 内側だけ白に変える.
B.py
"""
<方針>
- 全部黒に塗っておく.
- 内側だけ白に変える.
"""
H, W = map(int, input().split())
# 全部黒
ans = [["#"]*W for _ in range(H)]
# 内側だけ白
for h in range(1, H-1):
for w in range(1, W-1):
ans[h][w] = "."
# 出力
for h in range(H):
print("".join(ans[h]))
C問題
方針
- あらかじめ使える文字をメモしておく.
- 辞書で管理すればいけるっしょ.
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- あらかじめ使える文字をメモしておく.
- 辞書で管理すればいけるっしょ.
"""
N = int(input())
AB = [list(map(int, input().split())) for _ in range(N)]
M = int(input())
SS = [input() for _ in range(M)]
# 辞書構築
DDI = [set() for _ in range(N)]
for i in range(M):
S = SS[i]
for j in range(N):
A, B = AB[j]
if(len(S) == A):
DDI[j].add(S[B-1])
# 出力
for i in range(M):
S = SS[i]
# 長さが一致する時だけを考えれば良い.
if(len(S) == N):
ok = True
for j in range(len(S)):
if not (S[j] in DDI[j]):
ok = False
if(ok):
print("Yes")
else:
print("No")
else:
print("No")
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- ぎゅっと抱きしめて欲しかったというよりかは,ぎゅっと抱きしめたかったんだろうな.