リアルタイムに解けた問題
A - September
問題文
英小文字からなる12個の文字列$S_{1},S_{2},...,S_{12}$があります。
$S_{i}$の長さが$i$であるような整数$i(1\leq i\leq 12)$がいくつあるか求めてください。
制約
- $S_{i}$は英小文字からなる長さ1以上100以下の文字列である。$(1\leq i\leq 12)$
アルゴリズム
ループを回しながら、入力を受け取り、その文字列の長さがループ回数と同じ値であれば、変数countを増やしていく。
ソースコード
count = 0
for i in range(12):
S = input()
if len(S) == i+1:
count += 1
print(count)
B - 1D Keyboard
問題文
26個のキーが数直線上に並んだキーボードがあります。
このキーボードの配列はABCDEFGHIJKLMNOPQRSTUVWXYZ
を並べ替えた文字列$S$で表されます。文字列$S_{x}$に対応するキーが座標$x(1\leq x \leq 26)$にあります。ここで、$S_{x}$は、$S$の$x$文字目を表します。
あなたはこのキーボードを使ってABCDEFGHIJKLMNOPQRSTUVWXYZ
をこの順で右手人差し指で一度だけ入力します。ある文字を入力するためには、その文字に対応するキーの座標に指を移動させてキーを押す必要があります。
はじめ、指はA
に対応するキーの座標にあります。A
に対応するキーを押してから、Z
に対応するキーを押すまでの指の移動距離の合計として考えられる最小値を求めてください。ただし、キーを押す動作は移動距離に含まれません。
制約
- $S$は
ABCDEFGHIJKLMNOPQRSTUVWXYZ
を並べ替えた文字列である。
アルゴリズム
ループを用いて、入力におけるそれぞれの文字の位置を特定していく。移動距離の最小値を求めたいので、A
をみつけたときは、その位置だけを変数に保持、それ以外の文字の時は移動距離を累積し、その位置を変数に保持する。
ソースコード
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
S = input()
position = -1
total = 0
for word in alphabet:
for i in range(len(S)):
if word == S[i]:
if word == "A":
position = i
else:
total += abs(position-i)
position = i
print(total)
C - Max Ai+Bj
問題文
長さ$N$の整数列$A,B$が与えられます。1以上$N$以下の整数$i,j$を選んで、$A_{i}+B_{j}$の値を最大化してください。
制約
- $1\leq N \leq 5 * 10^{5}$
- $|A_{i}|\leq 10^{9}(i = 1,2,...,N)$
- $|B_{j}|\leq 10^{9}(j = 1,2,...,N)$
- 入力はすべて整数
アルゴリズム
入力を受け取る段階で、$A$と$B$それぞれの最大値を取得し、その和を出力
ソースコード
N = int(input())
A = max(list(map(int, input().split())))
B = max(list(map(int, input().split())))
print(A+B)