[ABC446] ABC 446(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
- 文字のスライスを結合すれば良い.
- 最初の文字は
lowerメソッドを使う. -
pythonの文字は置換できないので注意.
A.py
"""
<方針>
- 文字のスライスを結合すれば良い.
- 最初の文字は `lower` メソッドを使う.
- `python` の文字は置換できないので注意.
"""
# 入力
S = input()
# スライス結合.
ans = "Of" + S[0].lower() + S[1:]
# 出力
print(ans)
B問題
- 選ばれたジュースを管理する集合を持たせる
se
B.py
"""
<入力>
- 選ばれたジュースを管理する集合を持たせる `se`
"""
N, M = map(int, input().split())
se = set() # 選ばれたジュースを管理
# 人をそれぞれ見る
for _ in range(N):
L = int(input())
X = list(map(int, input().split()))
ans = 0 # ジュースが選ばれなかったら水になるように初期値を設定
# ジュースを見ていく
for x in X:
if not (x in se):
se.add(x)
ans = x
break
print(ans)
C問題
方針
- 卵の総数はそんなに大きくないので,
dequeを使って卵を管理する. - あとはシミュレーションすれば良い.
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- 卵の総数はそんなに大きくないので,`deque` を使って卵を管理する.
- あとはシミュレーションすれば良い.
"""
from collections import deque
T = int(input())
for _ in range(T):
N, D = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
q = deque() # 卵を管理する.左ほど古い.仕入れた日付を入れる.
for i in range(N):
a = A[i]
b = B[i]
# 朝の作業.卵を仕入れる
for _ in range(a):
q.append(i)
# 昼の作業.卵を使う.
for _ in range(b):
q.popleft()
# 夜の作業.卵を捨てる.
while q:
x = q.popleft()
# まだ使える時,
if(i < x+D):
# 戻す
q.appendleft(x)
break
# 卵の個数を確認
print(len(q))
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- 健康が一番大事らしい.