白兔的字串 字串hash

2021-09-27 17:55:23 字數 1480 閱讀 8382

原題

一道典型的字串hash,至於hash,這裡講的非常好。

一開始用map函式一直超時,後來改用unordered_map就過了,至於這2個map的區別,這裡講的挺清楚的。

之後去查了一下其它方法,發現還有一種方法是手寫map函式(強),指明@大佬

unordered_map是跑了600ms,重寫跑了100ms(強)

unordered_map:

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

unsigned

long

long ull;

const

int mod=

1e5+9;

const

int mx=

2e6+9;

const

int p=

107;

char s[mx]

;unordered_mapint> mp;

int len,n,m;

ull a=

1,has[mx]

;void

init_has()

}}intmain()

printf

("%d\n"

,ans);}

return0;

}

重寫map方法:

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

unsigned

long

long ull;

const

int mod=

1e5+9;

const

int mx=

2e6+9;

const

int p=

107;

char s[mx]

;unordered_mapint> mp;

int len,n,m,head[mx]

,cnt=0;

ull a=

1,has[mx]

;struct nodeedge[mx]

;void

add_edge

(ull x)

intfid

(ull x)

return0;

}void

init_has()

}}intmain()

printf

("%d\n"

,ans);}

return0;

}

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

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

白兔的字串

時間限制 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...