[ABC438] ABC 438(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)
A問題
- 合同式を使おう!
A.py
"""
<方針>
- 合同式を使おう!
"""
# 入力
D, F = map(int, input().split())
# 計算
ans = (F - D)%7
# 七日目のとき、
if(ans == 0):
ans = 7
# 出力
print(ans)
B問題
- 総当たり攻撃をしよう!!
- 部分一致する添字
iを準備 -
Sのi+jとTのjを合わせるように動かす
B.py
"""
<方針>
- 総当たり攻撃をしよう!!
- 部分一致する添字 `i` を準備
- `S` の `i+j` と`T` の `j` を合わせるように動かす
"""
# 入力
N, M = map(int, input().split())
S = input()
T = input()
ans = float("inf")
for i in range(N - M + 1):
tmp = 0
for j in range(M):
s = int(S[i+j])
t = int(T[j])
# 回転数を追加
tmp += (s - t)%10
# 更新
ans = min(ans, tmp)
# 出力
print(ans)
C問題
方針
- 消したり色々してると、
TLEになっちゃいそう。 - スタックを使って綺麗に実装しよう!!
前提
-
C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう. -
AとB問題では,基本的に制約条件を見ずにやっても解ける. - しかし,
C問題以降では,制約条件を見ないと必ずTLEすると思っても良い. - 詳しい話は私の352回の記事 の
C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- 消したり色々してると、`TLE` になっちゃいそう。
- スタックを使って綺麗に実装しよう!!
"""
# 入力
N = int(input())
A = list(map(int, input().split()))
# スタック
q = []
for a in A:
q.append(a)
# 揃ったら、
if(len(q) >= 4 and all([x == q[-1] for x in q[-4:]])):
# 消す
for i in range(4):
q.pop()
# 出力
print(len(q))
補足
関係するリンク(参考文献など)
筆者について
- Atcoderアカウント
- 今回も不参加のため,成績なし.
- 解説で示したA問題の提出
- 解説で示したB問題の提出
- 解説で示したC問題の提出
その他
- 間違いを含んでいる可能性があります.
- 方針と言いつつ,方針ではない感想などを書いている可能性があります.
- A問題から解説がだんだん省略されます.
- コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.
最後に一言
- 今気になってる動画↓↓↓↓
- この時期って面白い動画出るよね〜〜