根据题意标准的HASH匹配算法 #include<iostream> #include<cstring> #define MAX 16000010 using namespace std; int a[500]={0} bool b[MAX]; char c[MAX]; int n,m; int main() { int p=0,q=1; int i,j,len,num=0,ans=1; memset(b,0,sizeof(b)); scanf("%d%d",&n,&m); scanf("%s",c); len = strlen(c); for(i=0;i<len;i++) if (!a[c[i]]) a[c[i]]=++num; for(i=n-1;i>=1;i--) q*=m; for(i=0;i<n && c[i]!='/0';i++) p=p*m+a[c[i]]; if (i<n) printf("%d/n",0); else { j=0;b[p]=true; for(;i<len;i++) { j++; p=(p-q*a[c[j-1]])*m+a[c[i]]; if (!b[p]) { b[p]=true;ans++;} } printf("%d/n",ans); } return 0; }