トヨタ自動車プログラミングコンテスト2023#8(AtCoder Beginner Contest 333)の解説記事です。
ABC333 A – Three Threes
問題
問題文の要約は以下の通りです。
問題の要約
1以上9以下の整数 \(N\) が与えられたとき、\(N\) を \(N\) 個繋げて得られる文字列を出力せよ。
制約
・\(N\) は1以上9以下の整数
入力
\(N\)
出力
答えを出力せよ。
解説
\(N\) を文字列として \(N\) 個繋げて出力する。
解説
まず入力 \(N\) をint
型として受け取ります。
# 入力
N=int(input())
\(N\) を文字列として \(N\) 個繋げて出力するためには、str(N)*N
とすればよいです。
# 答えを出力
print(str(N)*N)
解答
# 入力
N=int(input())
# 答えを出力
print(str(N)*N)
ABC333 B – Pentagon
問題
問題文の要約は以下の通りです。
問題の要約
以下の図で表される正五角形 \(P\) の点 \(S_1\) と点 \(S_2\) を結ぶ線分と、点 \(T_1\) と点 \(T_2\) を結ぶ線分の長さが等しいか判定せよ。
制約
・\(S_1\), \(S_2\), \(T_1\), \(T_2\) はA
,B
,C
,D
,E
のいずれかの文字
・\(S_1 \ne S_2\)
・\(T_1 \ne T_2\)
入力
\(S_1S_2\)
\(T_1T_2\)
出力
\(P\) の点 \(S_1\) と点 \(S_2\) を結ぶ線分と、点 \(T_1\) と点 \(T_2\) を結ぶ線分の長さが等しい場合 Yes
を、等しくない場合 No
を出力せよ。
解説
線分の長さは正五角形の辺か対角線かの2通りです。
「\(S\) と \(T\) がどちらも正五角形の辺の場合」「\(S\) と \(T\) がどちらも正五角形の辺でない場合」「それ以外」の3通りで場合分けを行います。
解答
# 入力
S=input()
T=input()
# 正五角形の辺
edge=['AB','BC','CD','DE','EA','AE','ED','DC','CB','BA']
# SとTがどちらも正五角形の辺の場合
if S in edge and T in edge:
print('Yes')
# SとTがどちらも正五角形の辺でない場合
elif S not in edge and T not in edge:
print('Yes')
# それ以外
else:
print('No')
ABC333 C – Repunit Trio
問題
問題文の要約は以下の通りです。
問題の要約
十進法ですべての桁の数字が1である整数をレピュニットと呼びます。
ちょうど3つのレピュニットの和として表せる整数のうち \(N\) 番目に小さいものを出力せよ。
制約
・\(N\) は1以上333以下の整数
入力
\(N\)
出力
答えを出力せよ。
解説
問題文の入力例3で12桁なので12桁までの3つのレピュニットの和として表せる数を全探索します。
解答
# 入力
N=int(input())
# レピュニット
L=[int('1'*i) for i in range(1,13)]
# 3つのレピュニットの和として表せる数の集合
S=set()
# 3つのレピュニットの和として表せる数を計算する
for i in range(12):
for j in range(12):
for k in range(12):
S.add(L[i]+L[j]+L[k])
# ソートして出力
print(sorted(S)[N-1])