标签:des style http color os strong
Description
Input
Output
Sample Input
3 3 abcabcbcaabc
Sample Output
2
思路:这题周赛的时候没做出来,有点可惜了。要是当时记起来unsigned long long自动取模,然后提醒一下大帝的话,兴许大帝就能过了。唉,导致让他取了好多个模,最后还是WA了。太不机智了。范逗了。
这题我是从前面哈希的,看到题解中从后面哈希,就是不爽,所以自己从前面哈希。其实都一样啦。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<queue> #include<set> #include<bitset> #define INF 100007 using namespace std; typedef long long ll; typedef unsigned long long ull; char s[100005]; ull base[100010],hash[100010]; int main() { int m,l,i,j;//system("pause"); for(i=1,base[0]=1;i<100001;i++) base[i]=base[i-1]*131ULL; while(~scanf("%d%d",&m,&l)) { map<ull,int>mm; scanf("%s",s); int sum=0,len=strlen(s); for(i=1,hash[0]=0;i<=len;i++) hash[i]=hash[i-1]*131+s[i-1]-'a'+1; for(i=0;i<l&&i+m*l<=len;i++) { mm.clear(); for(j=i;j<m*l+i;j+=l) mm[hash[j+l]-hash[j]*base[l]]++; if(mm.size()==m) sum++; for(j=m*l+i;j<=len-l;j+=l) { int head=j-m*l; mm[hash[head+l]-hash[head]*base[l]]--; if(mm[hash[head+l]-hash[head]*base[l]]==0) mm.erase(hash[head+l]-hash[head]*base[l]); mm[hash[j+l]-hash[j]*base[l]]++; if(mm.size()==m) sum++; } } printf("%d\n",sum); } return 0; }
HDU 4821 杭州现场赛:每个片段字符串哈希比较,布布扣,bubuko.com
标签:des style http color os strong
原文地址:http://blog.csdn.net/u011466175/article/details/38052147