ABC352の回
A-問題
[考察や感想]
情報がたくさん書いてあるが、結局のところXとYの値の間にZが存在するかを判定する問題でした。
解法はすぐに思いついているので、もう少し早く書けるだけでパフォーマンス向上につながると思っています。
N,X,Y,Z= map(int,input().split())
# Z が X と Y の間の数字か判定する
# 大小があれば入れ替える
if X > Y:
X,Y = Y,X
#
if Z > X and Z < Y:
print("Yes")
else:
print("No")
B-問題
高橋君は英小文字からなる文字列 S をキーボードで入力しようとしました。
高橋君は画面を見ずにキーボードだけを見てタイピングをしていました。
誤って別の英小文字を入力してしまったときにはその直後にバックスペースキーを押しましたが、バックスペースキーが壊れていたため誤って入力された文字は消去されず、実際に入力された文字列は文字列 T となりました。
また、英小文字以外のキーを誤って押してしまうことはありませんでした。
T のうち高橋君が誤って入力した文字でないものを正しく入力された文字であると定めます。
正しく入力された文字が T の何文字目であるか答えてください。
[考察や感想]
こちらも情報が多いので、入力例出力例を見てロジックを組み立てました。Sの先頭の文字からTの何番目に文字があるかを順に調べて、最後にまとめて出力しました。最初に書いたコードだと同じ文字が連続したときに誤答となるため、「while i < len(S) and j < len(T)」を思いついて正答できました。
S = input()
T = input()
ans = []
i = 0
j = 0
# SとTの先頭から文字の一致を確認する
while i < len(S) and j < len(T):
# 一致したらそのインデックス番号+1 をリストに格納
if S[i] == T[j]:
ans.append(j+1)
i += 1
j += 1
else:
# 一致しない場合は、Tの次の文字を確認する
j += 1
# リストans を空白区切りで出力する
print(*ans)
C-問題
[考察や感想]
ノートに出力例を書きながら考察、結局のところ肩の高さを積み重ねているので巨人の順番が関係するのは最後だけ。「頭」の高さが最大の巨人を一番上に配置して地面からの「最大値」を計算する。B問題よりも早く正しい解法を思いつけたので、短時間で正答できました。
N = int(input())
A = []
B = []
plus = []
for _ in range(N):
a,b = map(int,input().split())
A.append(a)
B.append(b)
# 入力を取り込みながら肩から頭までの距離を格納する
plus.append(b-a)
# 肩から頭まで一番大きな値を取得する
mxplus = max(plus)
# 肩までの距離の集合と 肩から頭まで一番大きな値を足すだけ
ans = sum(A) + mxplus
print(ans)