[ABC451] ABC 451(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
-
lenを使おうぜ -
%で倍数判定しようぜ
A.py
"""
<方針>
- `len` を使おうぜ
- `%` で倍数判定しようぜ
"""
# 入力
S = input()
# 長さを取得
length = len(S)
# 5倍判定
if(length%5 == 0):
print("Yes")
else:
print("No")
B問題
- それぞれの部署に所属する,今期と来期の人数を記録しておく.
B.py
"""
<方針>
- それぞれの部署に所属する,今期と来期の人数を記録しておく.
"""
N, M = map(int, input().split())
# 人数の記録
now = [0]*M
nex = [0]*M
for _ in range(N):
a, b = map(int, input().split())
now[a-1] += 1
nex[b-1] += 1
# 出力
for i in range(M):
print(nex[i] - now[i])
C問題
方針
-
heapq使っていこうぜ!!
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- `heapq` 使っていこうぜ!!
"""
import heapq
Q = int(input())
q = [float("inf")] # 番兵も入れておこう.
for _ in range(Q):
match list(map(int, input().split())):
case [1, h]:
heapq.heappush(q, h)
case [2, h]:
# hを越すまで小さいやつを取り出そうぜ
while True:
x = heapq.heappop(q)
if(h < x):
heapq.heappush(q, x)
break
print(len(q)-1) # 番兵を引くのを忘れずに
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- 人生の JavaScript を有効にします.