【AtCoder】ABC320解説(Python)

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