标签: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