東京海上日動プログラミングコンテスト2023(AtCoder Beginner Contest 304)の解説記事です。
ABC304 A – First Player
問題
問題文の要約は以下の通りです。
問題の要約
\(i = 1, 2, \cdots, N\) と番号の付けられた \(N\) 人が順番に時計回りに円卓に座っています。名前は\(S_{i}\) 、年齢は\(A_{i}\)で同じ名前や年齢の人はいません。
年齢が最も小さい人から時計回りに\(N\) 人の名前を出力せよ。
制約
・\(2 \le N \le 100\)
・\(N\) は整数
・\(S_{i}\) は英小文字からなる長さ1から10以下の文字列
・\(i \neq j \Rightarrow S_{i} \neq S_{j}\)
・\(0 \le A_{i} \le 10^{9}\)
・\(A_{i}\) は整数
・\(i \neq j \Rightarrow A_{i} \neq A_{j}\)
入力
\(N\)
\(S_{1}\) \(A_{1}\)
\(S_{2}\) \(A_{2}\)
\(\vdots\)
\(S_{N}\) \(A_{N}\)
出力
答えを出力せよ。
解法
年齢が最も小さい人をfor
文で探し、もう一度for
文を回して名前を出力する。
解説
まず入力 \(N\) をint
型で受け取り、
\(S_{1}\) \(A_{1}\)
\(S_{2}\) \(A_{2}\)
\(\vdots\)
\(S_{N}\) \(A_{N}\)
を\(S\)で受け取ります。
N=int(input())
S=[input().split() for i in range(N)]
年齢の最大は\(10^{9}\)なのでそれをa
とおき、\(A_{i}\) と比べることで最小の年齢を探します。
a=10**9
for i in range(N):
a=min(a,int(S[i][1]))
年齢の最小値がわかったのでそれが何番目かをfor文で探します。
先ほどのfor
文で変数として持っていてもよいです。
そこから1周for
文で回します。
\(N\)の次は1の人なので(i+j)%N
番の人を順に出力すればよいことが分かります。
for i in range(N):
if a==int(S[i][1]):
for j in range(N):
print(S[(i+j)%N][0])
解答
N=int(input())
S=[input().split() for i in range(N)]
a=10**9
for i in range(N):
a=min(a,int(S[i][1]))
for i in range(N):
if a==int(S[i][1]):
for j in range(N):
print(S[(i+j)%N][0])