【AtCoder】ABC304解説(Python)

東京海上日動プログラミングコンテスト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])

ABC304 B – Subscribers

問題

問題文の要約は以下の通りです。

問題の要約

整数 \(N\) に対して、以下の操作を行った結果を出力せよ。
・\(N\) が \(10^{3} – 1\) 以下ならば、\(N\) をそのまま出力する。
・\(N\) が \(10^{3}\) 以上 \(10^{4} – 1\) 以下ならば、\(N\) の一の位を切り捨てて出力する。
・\(N\) が \(10^{4}\) 以上 \(10^{5} – 1\) 以下ならば、\(N\) の十の位を切り捨てて出力する。
・\(N\) が \(10^{5}\) 以上 \(10^{6} – 1\) 以下ならば、\(N\) の百の位を切り捨てて出力する。
・\(N\) が \(10^{6}\) 以上 \(10^{7} – 1\) 以下ならば、\(N\) の千の位を切り捨てて出力する。
・\(N\) が \(10^{7}\) 以上 \(10^{8} – 1\) 以下ならば、\(N\) の一万の位を切り捨てて出力する。
・\(N\) が \(10^{8}\) 以上 \(10^{9} – 1\) 以下ならば、\(N\) の十万の位を切り捨てて出力する。

制約

・\(N\) は 0 以上 \(10^{9} – 1\) 以下の整数

入力

\(N\)

出力

答えを出力せよ。

解説

文字列として受け取りスライスを使用する。

解説

\(N\) を文字列で受け取ります。

N = input()

\(N\) が \(10^{3} – 1\) 以下すなわち3桁以下であれば、\(N\) をそのまま出力します。

それ以外の場合は上位3桁と残りの桁は0にしたものを出力します。

if len(N) <= 3:
  print(N)
else:
  print(N[:3]+"0"*(len(N)-3))

解答

N = input()
if len(N) <= 3:
  print(N)
else:
  print(N[:3]+"0"*(len(N)-3))

スライスは範囲外を指定してもうまく動作するのでif文の場合分けはなくても構いません。

N = input()
print(N[:3]+"0"*(len(N)-3))
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次