白兔有乙個字串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|)<=106
輸出n行表示每個串的答案
abab
2abababab
ababcbaba
5
2
用字串hash函式把字串t中的每乙個長度都為strlen(t)的迴圈子串轉換成關鍵字儲存起來,然後對於每乙個樣例,查詢其中長度為strlen(t)的子字串是否在其中即可。。
會用到的hash函式
hash[n]=hash[n-1]*base+ch;
在[l,r]之間的字串的雜湊值是
hash[r]-hash[l-1]*h[r-l+1];
#include
#include
#include
#include
using
namespace std;
typedef
unsigned
long
long ull;
const
int maxn =
2e6+7;
const
int base =
131;
const
int mod =
1000007
;char str[maxn]
;ull has[maxn]
, h[maxn]
;int head[mod]
;int total =0;
struct node
rode[maxn]
;void
add(ull x)
intfind
(ull x)
return0;
}int
main()
h[0]=
1;for(
int i =
1; i <= l; i++
) has[0]
=0;for
(int i =
1; i <=
2* l; i++)}
int t;
cin >> t;
while
(t--)}
cout << ans << endl;
}return0;
}
字串雜湊 牛客白兔的字串
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 abab 2abababab ababcbaba 輸出 cpp 52 include using namespace std typedef unsign...
白兔的字串
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld白兔有乙個字串t。白雲有若干個字串s1,s2 sn。白兔想知道,對於白雲的每乙個字串,它有多少個子串是和t迴圈同構的。所有字元都是小寫英文本母 輸入描述 第一行乙個字...
白兔的字串 字串hash
原題 一道典型的字串hash,至於hash,這裡講的非常好。一開始用map函式一直超時,後來改用unordered map就過了,至於這2個map的區別,這裡講的挺清楚的。之後去查了一下其它方法,發現還有一種方法是手寫map函式 強 指明 大佬 unordered map是跑了600ms,重寫跑了1...