白兔的字串(字串hash 模擬map)

2022-03-05 16:05:04 字數 2405 閱讀 1289

白兔有乙個字串t。白雲有若干個字串s1,s2..sn。

白兔想知道,對於白雲的每乙個字串,它有多少個子串是和t迴圈同構的。

所有字元都是小寫英文本母

第一行乙個字串t(|t|<=10^6)第二行乙個正整數n (n<=1000)接下來n行為s1~sn (|s1|+|s2|+…+|sn|<=10^7),max(|s1|,|s2|,|s3|,|s4|,..|sn|)<=10^6

首先把字串t放大一倍,這樣就能找到所有的t的長度為len的情況了。然後hash一遍,標記一下。

然後對於輸入的t個字串,處理他的每個長度為len的子串,看是否被標記過。

(map會超時,可以模擬map)

ac**:

1 #include2

using

namespace

std;

3 # define ll long

long

4 # define ull unsigned long

long

5const

int mod = 1e9+7;6

const

int maxn = 1e6+100;7

const ull base = 131;8

const

int mod_map = 14937;9

char

str1[maxn],str2[maxn];

10ull ind[maxn],hash1[maxn],hash2[maxn];

11void

init1()

1218}19

struct

node

20 edge[maxn];

24int

head[maxn],cnt;

25void

addedge(ull x)// 類似於乙個對映

2632

intfind(ull x)

3340

return0;

41}42 ull get_sub1(int l,int

r)43

46 ull get_sub2(int l,int

r)47

50void

init2()

5158

for(int i=1; i<=len+len; i++)

5966}67

}68intmain()

6989 printf("

%d\n

",ans);90}

91return0;

92 }

1 #include2

using

namespace

std;

3 # define ll long

long

4 # define ull unsigned long

long5//

# define ull (unsigned long long)

6const

int maxn = 2e6+100;7

const

int mod_map = 14937;8

const ull base = 131;9

ull ind[maxn];

10ull hash1[maxn],hash2[maxn];

11char

str[maxn];

12 vectoredge[maxn];

13void

add(ull t)

1418 ull getsub1(int l,int

r)19

22 ull getsub2(int l,int

r)23

26bool

find(ull tmp)

2734

return

false;35

}36void

init()

3743

int len=strlen(str+1

);44

for(int i=1+len; i<=len+len; i++)

4548

for(int i=1; i<=len+len; i++)

4955}56

}57intmain()

5877

}78 printf("

%d\n

",ans);79}

80return0;

81 }

vector版

白兔的字串 字串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迴圈同構的。所有字元都是小寫英文本母 輸入描述 第一行乙個字...

字串雜湊 牛客白兔的字串

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 abab 2abababab ababcbaba 輸出 cpp 52 include using namespace std typedef unsign...