結果
| 問題 |
No.430 文字列検索
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-01-25 14:17:43 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 2,227 bytes |
| コンパイル時間 | 281 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 11,904 KB |
| 最終ジャッジ日時 | 2024-11-10 00:40:13 |
| 合計ジャッジ時間 | 1,567 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 4 |
| other | RE * 14 |
ソースコード
#
# ⋀_⋀
# (・ω・)
# ./ U ∽ U\
# │* 合 *│
# │* 格 *│
# │* 祈 *│
# │* 願 *│
# │* *│
#  ̄
#
import sys
sys.setrecursionlimit(10**6)
input=sys.stdin.readline
from math import floor,ceil,sqrt,factorial,hypot,log #log2ないyp
from heapq import heappop, heappush, heappushpop
from collections import Counter,defaultdict,deque
from itertools import accumulate,permutations,combinations,product,combinations_with_replacement
from bisect import bisect_left,bisect_right
from copy import deepcopy
from fractions import gcd
from random import randint
inf=float('inf')
mod = 10**9+7
def pprint(*A):
for a in A: print(*a,sep='\n')
def INT_(n): return int(n)-1
def MI(): return map(int,input().split())
def MF(): return map(float, input().split())
def MI_(): return map(INT_,input().split())
def LI(): return list(MI())
def LI_(): return [int(x) - 1 for x in input().split()]
def LF(): return list(MF())
def LIN(n:int): return [I() for _ in range(n)]
def LLIN(n: int): return [LI() for _ in range(n)]
def LLIN_(n: int): return [LI_() for _ in range(n)]
def LLI(): return [list(map(int, l.split() )) for l in input()]
def I(): return int(input())
def F(): return float(input())
def ST(): return input().replace('\n', '')
class RollingHash:
base = randint(1000,1000000)
mod = 2**61-1
def __init__(self,S):
self.hash = [0]*(len(S)+1)
for i,s in enumerate(S,start=1):
self.hash[i] = (self.hash[i-1] * self.base + ord(s)) % self.mod
#S[l:r]のハッシュを取得する
def get_hash(self,l,r):
if r-l<0:
print("r<l",(r,l),file=sys.stderr)
return (self.hash[r] - self.hash[l] * pow(self.base, r-l, self.mod) ) % self.mod
def main():
S=ST()
RH = RollingHash(S)
cnt = defaultdict(int)
for l in range(len(S)):
for r in range(l+1,l+11):
if r>len(S):
break
cnt[RH.get_hash(l,r)] += 1
M=I()
ans = 0
for _ in range(M):
s = ST()
h = RollingHash(s).get_hash(0,len(s))
ans += cnt[h]
print(ans)
if __name__ == '__main__':
main()