リアルタイムに解けた問題
A - 369
問題文
整数
$A,B$が与えられます。
以下の条件を満たす整数$x$が何通りあるか求めてください。
- 条件:3つの整数$A,B,x$をうまく並べることで、等差数列を作ることができる。
なお、3つの整数$p,q,r$をこの順に並べた列が等差数列であるとは、$q−p$が$r−q$と一致することをいいます。
制約
- $1 \leq A, B \leq 100$
- 入力は全て整数
アルゴリズム
AとBが等しいときは1通り、AとBの差の絶対値が偶数であれば、AとBの間に$x$を入れることができるので3通り、これら以外のときは2通りの$x$がある。
ソースコード
A, B = map(int, input().split())
if A == B :
print(1)
elif abs(A-B) % 2 == 0:
print(3)
else:
print(2)
B - Piano 3
問題文
高橋君は、横一列に並んだ100個の鍵盤からなるピアノを持っています。このピアノの左から$i$個目の鍵盤のことを鍵盤$i$と呼びます。
高橋君は今からN回にわたってこのピアノの鍵盤を一つずつ押すことでとある曲を演奏します。$i$回目に押す鍵盤は鍵盤$A_{i}$であり、それを押す手は$S_{i}$=Lのとき左手、$S_{i}$=Rのとき右手です。
演奏を始める前、高橋君は両手をそれぞれ好きな鍵盤の上に置くことができ、この時点での疲労度は0です。演奏中、片方の手を鍵盤$x$の上から鍵盤$y$の上へと動かすと疲労度が$∣y−x∣$増加します(逆に、手の移動以外で疲労度が増加することはありません)。なお、ある手である鍵盤を押すためには、その手がその鍵盤の上に置かれている必要があります。
演奏が終了した時点での疲労度は最小でいくつになるか求めてください。
制約
- $1 \leq N \leq 100$
- $1 \leq A_{i} \leq 100$
- $N$,$A_{i}$は整数
- $S_{i}$はLまたはR
アルゴリズム
疲労度が最小となるのは、左右の手の初期位置が、それぞれ演奏で始めて使われる鍵盤の位置であるとき。まず、左右の手の初期位置を求めてから、疲労度をループで計算していく。
ソースコード
N = int(input())
AS = [list(input().split()) for _ in range(N)]
left_pos = -1
right_pos = -1
tired_num = 0
for left in AS:
if left_pos != -1:
break
if left[1] == 'L':
left_pos = int(left[0])
for right in AS:
if right_pos != -1:
break
if right[1] == 'R':
right_pos = int(right[0])
for a in AS:
if a[1] == 'L':
tired_num += abs(int(a[0]) - left_pos)
left_pos = int(a[0])
else:
tired_num += abs(int(a[0]) - right_pos)
right_pos = int(a[0])
print(tired_num)