哈希算法之三

//poj 1200 Crazy Search

#include
<iostream> //hash
#include <string>
using namespace std;
bool table[20000000];
int ans[100],count,curr; //注意有大小写字母
char ch[1000000]; //本题中的输入字符串ch相当大,另外,table也要开得很大
int main()
{
int n,nc,len;
memset(ans,
-1,sizeof(ans));
scanf(
"%d%d%s",&n,&nc,ch);
len
=strlen(ch);
for(int i=0;i+n-1<len;++i)
{
int sum=0;
for (int j=i;j<i+n;++j)
{
if(ans[ch[j]-'A']==-1)
ans[ch[j]
-'A']=curr++;
sum
=sum*nc+ans[ch[j]-'A'];
}
if(table[sum]==0)
{
table[sum]
=1;
count
++;
}
}
printf(
"%d\n",count);
return 0;
}

  

posted on 2011-08-22 15:03  sysu_mjc  阅读(103)  评论(0编辑  收藏  举报

导航