結果
| 問題 |
No.430 文字列検索
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-08-10 02:11:14 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,767 bytes |
| コンパイル時間 | 85 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 19,232 KB |
| 最終ジャッジ日時 | 2024-11-10 00:27:05 |
| 合計ジャッジ時間 | 3,596 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 4 |
| other | AC * 1 TLE * 1 -- * 12 |
ソースコード
import sys
sys.setrecursionlimit(100000000)
def input():
return sys.stdin.readline()[:-1]
from bisect import *
from collections import *
from heapq import *
from fractions import Fraction
CHRtoINT = defaultdict(int)
AtoZ = [chr(i) for i in range(65,65+26)]
for i, c in enumerate(AtoZ):
CHRtoINT[c] = i
def RollingHash(S, s, x, b, h):
B, val = pow(b, x-1, h), 0
t = B
v = 0
for i, c in enumerate(s):
# print(i, c, t)
v = (v + CHRtoINT[c] * t) % h
t //= b
t = B
for i, c in enumerate(S[:x]):
# print(i, c, t)
val = (val + CHRtoINT[c] * t) % h
t //= b
if v == val:
ret = 1
else:
ret = 0
hash = [val] + [None]*(len(S)-x)
B *= b
for i, c in enumerate(S[:-x]):
# print(i, c, B)
val = (val * b - CHRtoINT[c] * B + CHRtoINT[S[i+x]]) % h
if val == v:
ret += 1
hash[i+1] = val
# print(hash, v)
# return hash
return ret
S = input()
M = int(input())
ans = 0
for i in range(M):
s = input()
ans += RollingHash(S, s, len(s), 5, 10**9+7)
# print(ans)
print(ans)
# N, D = map(int, input().split())
# X, Y = map(int, input().split())
# if X % D or Y % D:
# print(0)
# exit()
# X //= D
# Y //= D
# mod = 10**9+7
# def factrial(N):
# fc = [1, 1] + [None] * N
# inv = [0, 1] + [None] * N
# fcInv = [1, 1] + [None] * N
# for i in range(2, N+1):
# fc[i] = i*fc[i-1]%mod
# inv[i] = mod-(inv[mod%i]*(mod//i))%mod
# fcInv[i] = fcInv[i-1]*inv[i]%mod
# return fc, fcInv
# fc, fcInv = factrial(N+1)
# def modCom(n, k):
# return 0 if n < k else fc[n] * fcInv[k] * fcInv[n-k] % mod
# for k in range(0, N+1):
# for i in range(k+1):
# px = X+