トヨタ自動車プログラミングコンテスト2023#5(AtCoder Beginner Contest 320)の解説記事です。
目次
ABC320 A – Leyland Number
問題
問題文の要約は以下の通りです。
問題の要約
正整数 \(A, B\) に対して、\(A^B + B^A\) を求めよ。
制約
・\(2 \le A \le B \le 9\)
・\(A\), \(B\) は整数
入力
\(A\) \(B\)
出力
答えを整数で出力せよ。
解説
べき乗(累乗)の演算子**
を使用する。
解説
まず入力 \(A\), \(B\) を整数として受け取ります。
# 入力
A,B=map(int,input().split())
\(A^B + B^A\) はA**B+B**A
と書けるので結果を出力します。
# 出力
print(A**B+B**A)
解答
# 入力
A,B=map(int,input().split())
# 出力
print(A**B+B**A)
ABC320 B – Longest Palindrome
問題
問題文の要約は以下の通りです。
問題の要約
文字列 \(S\) の連続する部分文字列のうち、回文であるものの長さの最大値を求めてください。
制約
・\(S\) は長さ2以上100以下の英大文字からなる文字列
入力
\(S\)
出力
答えを出力せよ。
解説
\(S\) のすべての2文字以上の部分文字列が回文かどうか判定する。
解説
文字列を受け取り、回文かどうか判定する関数を定義します。s[::-1]
とすれば、文字列を変転できるのでこれと元の文字列が一致していたらTrue
を返し、一致していない場合はFalse
を返します。
# 回文かどうか判定する関数
def is_palindrome(s):
if s == s[::-1]:
return True
else:
return False
次に入力\(S\) を文字列で受け取ります。
# 入力
S=input()
答えの回文であるものの長さの最大値の変数をans
とします。
長さ1
の連続する部分文字列は回文なので初期値は1
にしています。
# 答え(長さ1の連続する部分文字列は回文なので初期値は1にしている)
ans=1
\(S\) の2文字以上の部分文字列が回文かどうか判定します。
部分文字列をスライスで指定します。最初の位置は0
からlen(S)
まで、部分文字列の最後の位置は最初の位置+2
からlen(S)+1
までになります。
回文であればその文字の長さと答えのうち、大きい方を答えとします。
最後に最終的な答えを出力します。
# 2文字以上の部分文字列が回文かどうか判定する
# 部分文字列の最初の位置
for i in range(0,len(S)):
# 部分文字列の最後の位置
for j in range(i+2,len(S)+1):
# 回文かどうか?
if is_palindrome(S[i:j]):
ans=max(ans,j-i)
# 出力
print(ans)
解答
# 回文かどうか判定する関数
def is_palindrome(s):
if s == s[::-1]:
return True
else:
return False
# 入力
S=input()
# 答え(長さ1の連続する部分文字列は回文なので初期値は1にしている)
ans=1
# 2文字以上の部分文字列が回文かどうか判定する
# 部分文字列の最初の位置
for i in range(0,len(S)):
# 部分文字列の最後の位置
for j in range(i+2,len(S)+1):
# 回文かどうか?
if is_palindrome(S[i:j]):
ans=max(ans,j-i)
# 出力
print(ans)