トヨタ自動車プログラミングコンテスト2024#4(AtCoder Beginner Contest 348)の解説記事です。
目次
ABC348 A – Penalty Kick
問題
問題文の要約は以下の通りです。
問題の要約
サッカーの試合で \(N\) 回ペナルティキックを蹴ります。\(i\) 回目のペナルティキックでは、\(i\) が 3 の倍数の場合は失敗しそれ以外の場合は成功します。ペナルティキックの結果を表す長さ \(N\) の文字列を出力せよ。結果を表す文字列の \(i\) \(( 1 \le i \le N )\) 文字目は \(i\) 回目のペナルティキックで成功した場合は o
、失敗した場合は x
とする。
解説
\(i\) が3の倍数かどうか判定して出力する。
解説
まず入力を受け取ります。
# 入力
N=int(input())
\(i\) が 3 の倍数の場合のとき o
をそれ以外は x
を出力します。\(i\) が 3 の倍数かどうかはi%3==0
と書くことができます。また、改行せずに出力する場合は、end=''
としてください。
# i 回目の結果を出力
for i in range(1,N+1):
# i が3の倍数のとき
if i%3==0:
print('x',end='')
else:
print('o',end='')
# 最後に改行する
print('')
解答
# 入力
N=int(input())
# i 回目の結果を出力
for i in range(1,N+1):
# i が3の倍数のとき
if i%3==0:
print('x',end='')
else:
print('o',end='')
# 最後に改行する
print('')
ABC348 B – Farthest Point
問題
問題文の要約は以下の通りです。
問題の要約
xy 平面上に 1 から \(N\) までの番号が付いた \(N\) 個の点があります。点 \(i\)は座標 \(( X_i, Y_i )\) にあり、相異なる 2 点の座標は異なります。各点について、その点からの距離が最大である点を求めてその点の番号を出力してせよ。 ただし、距離が最大である点が複数ある場合はその中で最も番号が小さい点の番号を出力せよ。
解説
全探索を行い、すべての点の組で距離を求める。
解説
まず入力を受け取ります。
# 入力
N=int(input())
X=[]
Y=[]
for i in range(N):
x,y=map(int,input().split())
X.append(x)
Y.append(y)
すべての点の組で距離を求めます。2点間の距離は2乗しても大小関係が変わらないため、ユークリッド距離の 2 乗で計算します。
# すべての点の組で距離を求める。
for i in range(N):
# 距離が最大になる点の番号
ans=0
# 距離の最大値
max_dist=0
for j in range(N):
# 2点間の距離
dist=(X[i]-X[j])**2+(Y[i]-Y[j])**2
# 距離の最大値を超えた場合は更新する
if max_dist <dist:
max_dist =dist
ans=j+1
# 距離が最大になる点の番号を出力
print(ans)
解答
# 入力
N=int(input())
X=[]
Y=[]
for i in range(N):
x,y=map(int,input().split())
X.append(x)
Y.append(y)
# すべての点の組で距離を求める。
for i in range(N):
# 距離が最大になる点の番号
ans=0
# 距離の最大値
max_dist=0
for j in range(N):
# 2点間の距離
dist=(X[i]-X[j])**2+(Y[i]-Y[j])**2
# 距離の最大値を超えた場合は更新する
if max_dist <dist:
max_dist =dist
ans=j+1
# 距離が最大になる点の番号を出力
print(ans)