[ABC448] ABC 448(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
- 順に比較してくだけ.
A.py
"""
<方針>
- 順に比較してくだけ.
"""
# 入力
N, X = map(int, input().split())
A = list(map(int, input().split()))
# 順番に見ていく
for a in A:
# 小さいのが見つかった
if(a < X):
print(1)
# Xを小さい方に更新しとく
X = a
else:
print(0)
B問題
- 貪欲にやって良いはず.
- かけれるだけこしょうをかけちまおう.
B.py
"""
<方針>
- 貪欲にやって良いはず.
- かけれるだけこしょうをかけちまおう.
"""
N, M = map(int, input().split())
C = list(map(int, input().split()))
ans = 0 # 使ったこしょうの総量
for _ in range(N):
A, B = map(int, input().split())
# 使っても卓上調味料が余る時
if(C[A-1] > B):
ans += B
C[A-1] -= B
# 卓上調味料を使い切っちゃう時
else:
ans += C[A-1]
C[A-1] = 0
print(ans)
C問題
方針
- あらかじめ
Aをindex付きでソートしておく. -
Aを前から取り出していき,Bになければ,それを出力する.
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<入力>
- あらかじめ `A` を `index` 付きでソートしておく.
- `A` を前から取り出していき,`B` になければ,それを出力する.
"""
N, Q = map(int, input().split())
A = list(map(int, input().split()))
# インデックスつきA を小さい順に並べる
AI = [(a, i+1) for i, a in enumerate(A)]
AI.sort()
for _ in range(Q):
K = int(input())
B = set(map(int, input().split()))
# 前から順番に見ていく
for a, I in AI:
if(not I in B):
print(a)
break
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- スペースを汚しすぎて,お叱りを受け取ってしまいました.