時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 262144k,其他語言524288k
64bit io format: %lld
題目描述
abab
2abababab
ababcbaba
**```
輸出:*
*```cpp
52
**:
#include
using
namespace std;
typedef
unsigned
long
long ull;
const ull maxn =
2e6+7;
char a[maxn]
,b[maxn]
;ull base[maxn]
,seed=
13131313
,hash[maxn]
;int ans;
void
init()
//獲得下標為i時的seed的i次方
void
rhash
(char
*str)
//例如1234 = 1*1000+2*100+3*10+4
ull gethash
(int l,
int r)
//234=1234-1000= 1*1000+2*100+3*10+4 - 1*1000
const
int m=
3e6+7;
int head[m]
,nex[m]
,cnt;
ull v[m]
;void
insert
(ull x)
//存入
bool
find
(ull x)
return
false;}
//查詢
intmain()
int n;
scanf
("%d"
,&n)
;while
(n--)
cout<}}
補充:
set中查詢也是跟這個同級別的,非常高效,可以用這個代替**中的雜湊表
牛客 D白兔的字串
白兔有乙個字串t。白雲有若干個字串s1,s2 sn。白兔想知道,對於白雲的每乙個字串,它有多少個子串是和t迴圈同構的。所有字元都是小寫英文本母 第一行乙個字串t t 10 6 第二行乙個正整數n n 1000 接下來n行為s1 sn s1 s2 sn 107 max s1 s2 s3 s4 sn 1...
白兔的字串 字串hash
原題 一道典型的字串hash,至於hash,這裡講的非常好。一開始用map函式一直超時,後來改用unordered map就過了,至於這2個map的區別,這裡講的挺清楚的。之後去查了一下其它方法,發現還有一種方法是手寫map函式 強 指明 大佬 unordered map是跑了600ms,重寫跑了1...
白兔的字串
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld白兔有乙個字串t。白雲有若干個字串s1,s2 sn。白兔想知道,對於白雲的每乙個字串,它有多少個子串是和t迴圈同構的。所有字元都是小寫英文本母 輸入描述 第一行乙個字...