【AtCoder】ABC333解説(Python)

トヨタ自動車プログラミングコンテスト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])
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次