1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ABC421] ABC 421(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)

Posted at

[ABC421] ABC 421(Atcoder Beginner Contest)のA~C(A,B,C)問題をPythonで解説(復習)

A問題

  • 配列で管理する。
  • 添字を元に照合をを行う。
A.py
"""
<方針>
- 配列で管理する。
- 添字を元に照合をを行う。
"""
# 入力
N = int(input())
S = [input() for _ in range(N)]
X, Y = input().split()

# 添字を取得
index = int(X) - 1

# 宛先が正しいかの確認
if(S[index] == Y):
  print("Yes")
else:
  print("No")

B問題

  • 関数を定義する。
  • ループ処理を施して、a_10 を手に入れる。
B.py
"""
<方針>
- 関数を定義する。
- ループ処理を施して、`a_10` を手に入れる。
"""
# 入力
X, Y = map(int, input().split())

# a2, a1を受け取って、a3, a2を返す。
def a(a2:int, a1:int)->(int, int):
  # 足す
  a3 = (a2+a1)
  # 反転させる
  a3 = str(a3)[::-1]
  # 数字にする
  a3 = int(a3)
  return a3, a2

# ループ処理
for _ in range(8):
  Y, X = a(Y, X)

# 出力
print(Y)

C問題

方針

  • なんとか、最終形が ABAB...ABAB or BABA...BABA であることを見抜く。
  • その形にするために、一つ一つの文字 O(N) を具体的に動かして O(N) いては、全体で、O(N^2) となり、TLE になる。
  • 一旦、奇数番目に "A" がくるパターンと "B" がくるパターンで分けて考えて、片方の解放がわかれば良さそう。
  • 結局、互いの同じアルファベット同士を交差するのは無駄と気づく。
  • よって、最終的な位置との差分を線形走査させれば、O(N) でいけそう。

前提

  • C問題あたりで,TLEになる人は,制約条件を見る癖をつけよう.
  • AB問題では,基本的に制約条件を見ずにやっても解ける.
  • しかし,C問題以降では,制約条件を見ないと必ずTLEすると思っても良い.
  • 詳しい話は私の352回の記事C問題の解説に記したので,是非参照してほしい.
C.py
"""
<方針>
- なんとか、最終形が `ABAB...ABAB` or `BABA...BABA` であることを見抜く。
- その形にするために、一つ一つの文字 `O(N)` を具体的に動かして `O(N)` いては、全体で、`O(N^2)` となり、`TLE` になる。
- 一旦、奇数番目に `"A"` がくるパターンと `"B"` がくるパターンで分けて考えて、片方の解放がわかれば良さそう。
- 結局、互いの同じアルファベット同士を交差するのは無駄と気づく。
- よって、最終的な位置との差分を線形走査させれば、`O(N)` でいけそう。
"""
# 入力
N = int(input())
S = input()

ans = float("inf")
# 奇数番目の文字列
for A in ["A", "B"]:
  cnt = 0
  ind = 0
  # 線形走査
  for i, a in enumerate(S):
    # ターゲットの文字列であったとき、
    if(A == a):
      # 最終的な位置との差分を加える
      cnt += abs(ind - i)
      # 次の最終的な位置を取得する。
      ind += 2
  
  # 最適解を更新
  ans = min(ans, cnt)

# 出力
print(ans)

補足

関係するリンク(参考文献など)

筆者について

その他

  • 間違いを含んでいる可能性があります.
  • 方針と言いつつ,方針ではない感想などを書いている可能性があります.
  • A問題から解説がだんだん省略されます.
  • コードに書かれている解説の文言と,その上に書いてある解説の文言を変えている場合があります.

最後に一言

  • 全てが忙しいので、ABCだけにします🙇(今回のDなんかむずくね?)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?