結果
| 問題 |
No.430 文字列検索
|
| コンテスト | |
| ユーザー |
norioc
|
| 提出日時 | 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)
norioc