【AtCoder】ABC313解説(Python)

第四回日本最強プログラマー学生選手権-予選-(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)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次