[ABC453] ABC 453(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
- 頭から見て,
"o"じゃないタイミングから答えにしよう - 全部
"o"の時は,最初に間引いておきましょう.
A.py
"""
<方針>
- 頭から見て,`"o"` じゃないタイミングから答えにしよう
- 全部 `"o"` の時は,最初に間引いておきましょう.
"""
# 入力
N = int(input())
S = input()
# 全部 o
if("o"*N == S):
print("")
exit()
# o じゃないタイミング
for i in range(N):
if(S[i] != "o"):
break
# 答え
ans = S[i:]
# 出力
print(ans)
B問題
- シミュレーションしようぜ
- 最初は番兵持たせようぜ
B.py
"""
<方針>
- シミュレーションしようぜ
- 最初は番兵持たせようぜ
"""
T, X = map(int, input().split())
A = list(map(int, input().split()))
# 最初
now = float("inf")
# シミュレーション
for i in range(T+1):
# 絶対差分
diff = abs(now-A[i])
# 閾値処理
if(diff >= X):
print(i, A[i])
# 現在の値を更新
now = A[i]
C問題
方針
- 右行くか左に行くかを全パターン考えるcar...
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- 右行くか左に行くかを全パターン考えるcar...
"""
N = int(input())
L = list(map(int, input().split()))
ans = 0
for i in range(1<<N):
# 符号の全パターン列挙
sign = [-1]*N
for j in range(N):
if(i&(1<<j)):
sign[j] = +1
# シミュレーション
tmp = 0
now = 0.5
for j in range(N):
new = now + sign[j]*L[j]
# 符号が反転した時のみカウント
if(now*new < 0):
tmp += 1
now = new
# 更新
ans = max(ans, tmp)
print(ans)
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- ピクミンめっちゃおもろい