题意:
给一个字符串\(s\),统计长为\(M*L\)的字串的个数。如果将该字串看成\(M\)个长为\(L\)的串拼接起来,那么这\(M\)个串必须互不相同。
分析:
枚举串的开头,然后用map来维护这\(M\)个hash值。
我用的《训练指南》上的hash方法:
定义一个
\(H(n)=\sum{s_i x^{i-n}}\) 则
\(i\)开头的长为
\(L\)的字串的hash值为:
\(H(i)-H(i+L)x^L\) hash值为
unsigned long long类型,这样就不用在代码中取模了。
#include #include #include #include