好像ELFhash过不了啊,换了个hash函数过了 #includestdio.h#includestring.h#includestdlib.h#define maxn 16000000 char s[maxn];int a[1000];bool vis[1000];int hash[maxn]; int main(){int N,NC,num=0,len,i,cnt=0,sum=0,j;scanf("%d%d",N,NC
好像ELFhash过不了啊,换了个hash函数过了
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxn 16000000
char s[maxn];
int a[1000];
bool vis[1000];
int hash[maxn];
int main(){
int N,NC,num=0,len,i,cnt=0,sum=0,j;
scanf("%d%d",&N,&NC);
scanf("%s",&s);
len=strlen(s);
for(i=0;i<len;i++){//ascll码作为下表
if(!vis[s[i]]){
a[s[i]]=num++;
vis[s[i]]=1;
}
}
for(i=0;i<len-N+1;i++){
sum=0;
for(j=i;j<i+N;j++)
sum+=sum*NC+a[s[j]];
if(!hash[sum]){//hash表
cnt++;
hash[sum]=1;
}
}
printf("%d\n",cnt);
return 0;
}