【AtCoder】ABC314解説(Python)

AtCoder Beginner Contest 314の解説記事です。

目次

ABC314 A – 3.14

問題

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

問題の要約

1以上100以下の整数 \(N\) に対して、円周率を小数第 \(N\) 桁まで出力せよ。

制約

・\(1 \le N \le 100\)
・\(N\) は整数

入力

\(N\)

出力

円周率を小数第 \(N\) 桁まで1行で出力せよ。

解説

Pythonのスライスで、小数第 \(N\) 桁までの文字を取り出します。

解説

まず入力 \(N\) をint型として受け取ります。

# 入力
N=int(input())

円周率を文字列Sと置きます。

# 円周率
S='3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679'

円周率を小数第 \(N\) 桁は、文字列Sの \(N+2\) 桁までなので、スライスでS[:N+2]を出力します。

# 小数第 N 桁まで出力
print(S[:N+2])

解答

# 入力
N=int(input())

# 円周率
S='3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679'

# 小数第 N 桁まで出力
print(S[:N+2])

ABC314 B – Roulette

問題

解説

ルーレットに賭けた全参加者の中で \(X\) に賭けた人たちの賭けた目の個数を数え、その最小値に等しい賭け数を持つ参加者を特定する。

解説

参加者の数 \(N\) を入力を受け取り、各参加者が賭けた目の個数と賭けた目を格納するリストCAを初期化します。

# 入力
N=int(input())
# 各参加者が賭けた目の個数を格納するリスト
C=[0 for i in range(N)]
# 各参加者が賭けた目を格納するリスト
A=[[] for i in range(N)]

各参加者の賭けた目の個数と賭けた目を入力から受け取ります。

# 各参加者について、賭けた目の個数と賭けた目を入力から受け取る
for i in range(N):
  C[i]=int(input())  # i番目の参加者の賭けた目の個数
  A[i]=list(map(int,input().split()))  # i番目の参加者が賭けた目

ルーレットの出目Xを入力から受け取り、出力するための答えを格納するリストと最小の賭けた目の個数を格納する変数を用意します。

# 入力(ルーレットの出目)
X=int(input())

# 出力するための答えを格納するリスト
ans=[]
# 最小の賭けた目の個数を格納する変数
min_bet=100

\(X\) に賭けた人たちの中で賭けた目の個数が最も少ない人たちを見つけるために、まず最小の賭けた目の個数を探します。

# Xに賭けた人たちの中で賭けた目の個数が最も少ない個数を見つける
for i in range(N):
  if X in A[i]:  # i番目の参加者がXに賭けているかチェック
    min_bet=min(min_bet,len(A[i]))  # i番目の参加者の賭けた目の個数と現在の最小値を比較し、小さい方をmin_betに格納

条件を満たす参加者の番号をansリストに追加します。

# Xに賭けており、かつ賭けた目の個数が最も少ない参加者の番号をansに格納
for i in range(N):
  if (X in A[i]) and (len(A[i])==min_bet):  # Xに賭けており、賭けた目の個数がmin_betと等しい場合
    ans.append(i+1)  # 人の番号は1から始まるため、i+1をansに追加

条件を満たす人の数と、その番号を出力します。

# 出力(条件を満たす人の数と、その番号)
print(len(ans))
print(*ans)

解答

# 入力
N=int(input())
# 各参加者が賭けた目の個数を格納するリスト
C=[0 for i in range(N)]
# 各参加者が賭けた目を格納するリスト
A=[[] for i in range(N)]

# 各参加者について、賭けた目の個数と賭けた目を入力から受け取る
for i in range(N):
  C[i]=int(input())  # i番目の参加者の賭けた目の個数
  A[i]=list(map(int,input().split()))  # i番目の参加者が賭けた目

# 入力(ルーレットの出目)
X=int(input())

# 出力するための答えを格納するリスト
ans=[]
# 最小の賭けた目の個数を格納する変数
min_bet=100

# Xに賭けた人たちの中で賭けた目の個数が最も少ない個数を見つける
for i in range(N):
  if X in A[i]:  # i番目の参加者がXに賭けているかチェック
    min_bet=min(min_bet,len(A[i]))  # i番目の参加者の賭けた目の個数と現在の最小値を比較し、小さい方をmin_betに格納

# Xに賭けており、かつ賭けた目の個数が最も少ない参加者の番号をansに格納
for i in range(N):
  if (X in A[i]) and (len(A[i])==min_bet):  # Xに賭けており、賭けた目の個数がmin_betと等しい場合
    ans.append(i+1)  # 人の番号は1から始まるため、i+1をansに追加

# 出力(条件を満たす人の数と、その番号)
print(len(ans))
print(*ans)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次