結果
問題 |
No.3110 Like CPCTF?
|
ユーザー |
![]() |
提出日時 | 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()