結果

問題 No.3110 Like CPCTF?
ユーザー k-kuwata
提出日時 2025-05-14 18:31:48
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 52 ms / 2,000 ms
コード長 2,156 bytes
コンパイル時間 834 ms
コンパイル使用メモリ 12,160 KB
実行使用メモリ 10,240 KB
最終ジャッジ日時 2025-05-14 18:31:51
合計ジャッジ時間 2,329 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 16
権限があれば一括ダウンロードができます

ソースコード

diff #

# -*- coding: utf-8 -*-
from itertools import combinations

def solve():
    """
    与えられた文字列 S から CPCTF 的な部分文字列の数を数える関数。
    """
    # N (文字列Sの長さ) を標準入力から読み込む
    n = int(input())
    # 文字列 S を標準入力から読み込む
    s = input()

    # CPCTF的な部分文字列の数を格納するカウンタ
    cpctf_count = 0

    # CPCTF的な文字列は長さが5なので、Nが5未満の場合は存在しない
    if n < 5:
        print(0)
        return

    # 文字列Sから5つの文字を選ぶためのインデックスの組み合わせを生成する
    # indices は (i1, i2, i3, i4, i5) のようなタプルで、
    # 0 <= i1 < i2 < i3 < i4 < i5 < N を満たす
    # これにより、S の部分文字列を順番を保ったまま取り出せる
    for indices in combinations(range(n), 5):
        # 選ばれた5つのインデックスに対応する文字を取得
        char1 = s[indices[0]]  # 部分文字列の1文字目
        char2 = s[indices[1]]  # 部分文字列の2文字目
        char3 = s[indices[2]]  # 部分文字列の3文字目
        char4 = s[indices[3]]  # 部分文字列の4文字目
        char5 = s[indices[4]]  # 部分文字列の5文字目

        # CPCTF的文字列の条件をチェック
        # 条件1: 1文字目と3文字目が等しい
        if char1 == char3:
            # 条件2: 1文字目(および3文字目)は、他のどの文字とも異なる
            # (char1 != char2 かつ char1 != char4 かつ char1 != char5)
            if char1 != char2 and char1 != char4 and char1 != char5:
                # 条件3: 2文字目、4文字目、5文字目が互いにすべて異なる
                # (char2 != char4 かつ char2 != char5 かつ char4 != char5)
                if char2 != char4 and char2 != char5 and char4 != char5:
                    # すべての条件を満たせば、CPCTF的な部分文字列としてカウント
                    cpctf_count += 1
    
    # 結果を出力
    print(cpctf_count)

if __name__ == '__main__':
    solve()
0