結果
| 問題 |
No.430 文字列検索
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-01-24 16:53:19 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 824 bytes |
| コンパイル時間 | 82 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 21,664 KB |
| 最終ジャッジ日時 | 2024-11-10 00:58:37 |
| 合計ジャッジ時間 | 3,477 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 4 |
| other | AC * 1 TLE * 1 -- * 12 |
ソースコード
# 1-dimension Rolling Hash
class RollingHash:
def __init__(self, s, base, mod):
self.mod = mod
self.pw = pw = [1] * (len(s) + 1)
l = len(s)
self.h = h = [0] * (l + 1)
v = 0
for i in range(l):
h[i + 1] = v = (v * base + ord(s[i])) % mod
v = 1
for i in range(l):
pw[i + 1] = v = v * base % mod
def get(self, l, r):
return (self.h[r] - self.h[l] * self.pw[r - l]) % self.mod
# 非クラス版
base = 37
mod = 10 ** 9 + 9
S = input()
N = len(S)
RHS = RollingHash(S, base, mod)
M = int(input())
ans = 0
for i in range(M):
C = input()
K = len(C)
RH = RollingHash(C, base, mod)
hash = RH.get(0, K)
for i in range(N - K + 1):
if RHS.get(i, i + K) == hash:
ans += 1
print(ans)