第四回日本最強プログラマー学生選手権-予選-(AtCoder Beginner Contest 313)の解説記事です。
目次
ABC313 A – To Be Saikyo
問題
問題文の要約は以下の通りです。
問題の要約
\(i = 2, 3, \cdots N\) に対して、\(P_{1} + x > P_{i}\) を満たす最小の非負整数 \(x\) を求めよ。
制約
・\(1 \le N \le 100\)
・\(1 \le P_{i} \le 100\)
・入力は全て整数
入力
\(N\)
\(P_{1}\) \(P_{2}\) \(\cdots\) \(P_{N}\)
出力
答えを整数で出力せよ。
解説
\(i = 2, 3, \cdots N\) に対して、\(P_{1} + x > P_{i}\) を満たすとは、\(P_{2}\) \(\cdots\) \(P_{N}\) の最大値をP_max
としたときに \(P_{1} + x > \)P_max
を満たすことと同値になります。
解説
まず入力 \(N\) をint
型、\(P\) をlist
として受け取ります。
# 入力
N=int(input())
P=list(map(int,input().split()))
\(P_{2}\) \(\cdots\) \(P_{N}\) の最大値をP_max
とおいて初期値を0とします。
# P[i] の最大値 (i = 2, 3, … N)
P_max=0
for
文でP_max
を求めます。
# P[i] の最大値を求める
for i in range(1,N):
P_max=max(P[i],P_max)
\(P_{1} + x > \)P_max
を満たす \(x\) を求めます。
\(P_{1} > \)P_max
を満たすときは \(x =0\) を出力します。
それ以外の時は、\(x = \)P_max
\( – P_{1} + 1\) とおけばP_max
\( + 1 > \)P_max
となるので条件を満たします。
# P[0] が P_max より大きいとき
if P[0]>P_max:
print(0)
# それ以外の時
else:
print(P_max-P[0]+1)
解答
# 入力
N=int(input())
P=list(map(int,input().split()))
# P[i] の最大値 (i = 2, 3, … N)
P_max=0
# P[i] の最大値を求める
for i in range(1,N):
P_max=max(P[i],P_max)
# x = 0 のとき
if P[0]>P_max:
print(0)
# x = 0 以外の時
else:
print(P_max-P[0]+1)