結果
| 問題 | 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