牛客 D白兔的字串

2021-10-04 22:34:48 字數 1375 閱讀 2404

白兔有乙個字串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...