N° Studio logoHarutoStudio
使い方記事Premium
ダッシュボード
使い方記事Premium
ブログ/APCS Jan 2022 - h083
  • #apcs

APCS Jan 2022 - h083

BlackInkBlackInk2025年6月19日 08:00
目次 APCS Jan 2022 - h083 Q3 [Python]
  1. APCS Jan 2022 - h083 Q3 [Python]
  2. 解法レポート
  3. ポイント

APCS Jan 2022 - h083 Q3 [Python]

問題文:

おみくじの筒に M 本のくじがあり、それぞれに英小文字の文字列が書かれています。2本を取り出して文字列 S と T を連結したとき、前半と後半が同じ文字列になれば、神意が「可」を示す聖筊とします。それ以外は「否」または回答なしです。例えば piep と ie は piepie となり、pie と pie に分けられますが、foo と bar は条件を満たしません。不思議なことに、S と T が条件を満たすなら逆順でも成立します。piepie と iepiep は、どちらも同じ文字列2つに分けられます。M 本から作れる組のうち、条件を満たす組の数を求めてください。同じ2本の組み合わせは一度だけ数えます。

m = int(input())
c = set()

for _ in range(m):
    c.add(input())


total = 0
for i in c:
    for idx in range((len(i) - 1 )//2):
        idx += 1
        if i[:idx] == i[-idx:] and i[idx:-idx] in c:
            total += 1

print(total)

解法レポート

  1. 集合内の各文字列 i をループし、インデックス idx を使って両端が一致するか調べます。
  2. 両端が一致し、それを取り除いた中央部分も集合 c に存在すれば、有効な組です。
  3. 見つかるたびに total を1増やし、最後に条件を満たす組の数として出力します。

ポイント

  1. 文字列のスライス: abyyyab なら、文字列の半分までループして先頭と末尾を比較します:if i[:idx] == i[-idx:]。
  2. set() による検索: Python組み込みの set() に全文字列を格納します。if i[idx:-idx] in c によって中央部分も筒の中にある文字列か確認します。

この問題で使う知識:

  • 全探索
  • HASH
  • SET

  • [✔️] 必要であればコードをそのまま使用できます。
  • [✔️] 共有する際は出典を明記してください。

image

この記事は繁体字中国語の原文をAIで翻訳したものです。意味や表現に違いがある可能性があります。正確な内容は繁体字中国語の原文をご確認ください。

目次

  1. APCS Jan 2022 - h083 Q3 [Python]
  2. 解法レポート
  3. ポイント
HarutoStudio LogoHarutoStudio

HarutoStudio © 2023 - 2026

リンク

  • ドキュメント
  • ダッシュボード
  • 利用規約
  • プライバシーポリシー
  • 返金ポリシー
  • Bot の稼働状況

コミュニティ

  • Discord
  • Github
  • Instagram
  • top.gg

運営を支援

  • Premium プラン
  • パートナー