AtCoder-ABC221 A - Seismic magnitude scales / B - typo【Python解答例】
AtCoder Beginner Contest221のA とB問題についてPythonの解答例を記事にしていきます。
AtCoder Beginner Contest 221 - AtCoder
AtCoder Beginner Contest221 A - Seismic magnitude scales
問題文
地震のマグニチュードは、その地震のエネルギーの大きさを対数で表した値です。マグニチュードが 1 増える度にエネルギーは約 32 倍になることが知られています。
ここではマグニチュードが 1 増える度に地震のエネルギーがちょうど 32 倍になるとします。このとき、マグニチュード A の地震のエネルギーの大きさはマグニチュード B の地震のエネルギーの大きさの何倍ですか?
制約
・3≤B≤A≤9
・A , B は整数
解答例
a, b = map(int,input().split()) ans = pow(32,a-b) print(ans)
解説
マグニチュードAの地震とマグニチュードBの地震のエネルギーでは何倍違うかを答える問題です。
問題文にマグニチュードが1増えるごとにエネルギーは32倍になるとしていますので、答えは32のA-B乗です。
ansにこの値を計算し出力すればOKでした。
AtCoder Beginner Contest221 B - typo
問題文
文字列 S, T が与えられます。以下の操作を高々 1 回行うことで、S を T と一致させることができるかを判定してください。
S の隣り合う 2 文字を選び、入れ替える。
なお、上記の操作を一度も行わないことも可能です。
制約
・S, T はそれぞれ英小文字のみからなる、長さ 2 以上 100 以下の文字列
・S の長さと T の長さは等しい
解答例
s = input() t = input() flag = True count = 0 i = 0 while i < (len(s)-1): if s[i] == t[i]: i += 1 continue elif s[i] != t[i] and s[i] == t[i+1] and t[i] == s[i+1] and count ==0: count += 1 i += 2 continue else: flag = False break if flag : print("Yes") else: print("No")
解説
Sの隣り合う文字を最大1回入れ替えることで、Tと一致するかを答える問題です。
Sの文字列の先頭からTと一致しているか、確認していきました。
もしSとTが異なっていたら、次の文字と比較し S[i]とT[i+1]が、T[i]とS[i+1]が一致していたら探索を続けます。
ただし、入れ替えは1回までなのでcount変数を1を足して、入れ替え回数を管理します。
もし2回以上入れ替えの必要があったり、文字を入れ替えても一致しない場合はflagをFalseにして、flagの状況にあわせて答えを出力すればOKです。
ABC221の関連記事はこちら
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com