原題
一道典型的字串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...