[ABC459] ABC 459(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
- スライスを使う
A.py
"""
<方針>
- スライスを使う
"""
# 入力
X = int(input())
# 文字列
HELLO_WORLD = "HelloWorld"
# スライスで連結
ans = HELLO_WORLD[:X-1] + HELLO_WORLD[X:]
# 出力
print(ans)
B問題
- 気合いです.
B.py
"""
<方針>
- 気合いです.
"""
N = int(input())
S = list(input().split())
ans = ""
for s in S:
if s[0] in ["a", "b", "c"]:ans += "2"
if s[0] in ["d", "e", "f"]:ans += "3"
if s[0] in ["g", "h", "i"]:ans += "4"
if s[0] in ["j", "k", "l"]:ans += "5"
if s[0] in ["m", "n", "o"]:ans += "6"
if s[0] in ["p", "q", "r", "s"]:ans += "7"
if s[0] in ["t", "u", "v"]:ans += "8"
if s[0] in ["w", "x", "y", "z"]:ans += "9"
print(ans)
C問題
方針
- なんとか各クエリを定数時間に抑えたい.
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- なんとか各クエリを定数時間に抑えたい.
"""
from collections import defaultdict
N, Q = map(int, input().split())
diStack = defaultdict(int) # 何個積み重なってるか
diCount = defaultdict(int) # 積み重なりが何個か
L = 0 # 消した数
for _ in range(Q):
match list(map(int, input().split())):
case [1, x]:
diStack[x] += 1
diCount[diStack[x]] += 1
# 消す相当の処理
if diCount[L+1] == N:
L += 1
case [2, y]:
print(diCount[L+y])
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- 忙しい侍