結果
問題 |
No.430 文字列検索
|
ユーザー |
![]() |
提出日時 | 2025-09-28 23:41:11 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 373 ms / 2,000 ms |
コード長 | 877 bytes |
コンパイル時間 | 295 ms |
コンパイル使用メモリ | 82,172 KB |
実行使用メモリ | 259,772 KB |
最終ジャッジ日時 | 2025-09-28 23:41:16 |
合計ジャッジ時間 | 4,104 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 14 |
ソースコード
class Node: def __init__(self): self.cnt = 0 def insert(root, s: str, start: int): cur = root for i in range(10): # 最大10文字まで p = i + start if p >= len(s): break c = s[p] if c not in cur: cur[c] = [Node(), {}] node, children = cur[c] node.cnt += 1 cur = children def traverse(root, s: str): cur = root for i, c in enumerate(s): if c not in cur: return 0 node, children = cur[c] if i+1 == len(s): return node.cnt cur = children assert False INF = 1 << 60 S = input() M = int(input()) C = [input() for _ in range(M)] trie = {} for i in range(len(S)): # i 番目から最大 10 文字までトライ木に登録する insert(trie, S, i) ans = sum([traverse(trie, c) for c in C]) print(ans)