結果
| 問題 | 
                            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 | 
ソースコード
# -*- 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()
            
            
            
        
            
k-kuwata