[ABC434] ABC 434(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
- 割った値
+1にすれば良さそう。
A.py
"""
<方針>
- 割った値 `+1` にすれば良さそう。
"""
# 入力
W, B = map(int, input().split())
# 割った値 + 1
ans = (W*1000 // B) + 1
# 出力
print(ans)
B問題
- 種類毎に重さの合計と個体数を管理すれば良さそう。
- 最後にまとめて割れば良さそう。
B.py
"""
<方針>
- 種類毎に重さの合計と個体数を管理すれば良さそう。
- 最後にまとめて割れば良さそう。
"""
# 入力
N, M = map(int, input().split())
AB = [list(map(int, input().split())) for _ in range(N)]
# 種類毎に管理。[重さの合計, 個体数]
ls = [[0, 0] for _ in range(M)]
# 種類毎に集計
for A, B in AB:
a = A-1 # 0-index
# 現在の値を取り出す
weight, count = ls[a]
# 値を更新
ls[a] = [weight+B, count+1]
# 順番に出力
for weight, count in ls:
# 平均を取得
mean = weight/count
# 出力
print(mean)
C問題
方針
- 数字が馬鹿でかいところはループとかを回すわけにはいかない。
- 移動できるレンジが目標と被ってるところがあるかを毎回試してけばいけんじゃね?
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- 数字が馬鹿でかいところはループとかを回すわけにはいかない。
- 移動できるレンジが目標と被ってるところがあるかを毎回試してけばいけんじゃね?
"""
T = int(input())
for _ in range(T):
N, H = map(int, input().split())
T = 0 # 現在時刻
L = H # 現在最低高度
U = H # 現在最高高度
ok = True # 可能フラグ
# 試してみる
for _ in range(N):
t, l, u = map(int, input().split())
dt = t - T # 時間変化
T = t # 現在時刻更新
L = max(L - dt, l) # 現在最低高度更新
U = min(U + dt, u) # 現在最低高度更新
# 高度が矛盾したら
if not (L<=U):
ok = False
# 出力
if(ok):
print("Yes")
else:
print("No")
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- 最強伝説黒沢に従って、ここまで俺のことを買ってくれる男がいたので、それにします(多分)。
- まじで最近Cまでしか解いてない🥺