poj 1200(水题,注意has值的计算是用的s[a[j]]而不是s[j])
#include#include using namespace std; #define maxn 16000005 bool has[maxn]; char a[maxn]; int s[150]; int main(){ int n,nc,len,zz,sum,ans; scanf("%d%d",&n,&nc); scanf("%s",a); memset(has,false,sizeof has); memset(s,0,sizeof s); len = strlen(a); zz = 0; for(int i=0;i ){ if(!s[a[i]])s[a[i]] = zz++; } ans = 0; for(int i=0;i<=len-n;i++){ sum = 0; for(int j=i;j<=i+n-1;j++){ sum = sum*nc+s[a[j]]; } if(!has[sum]){ ans++; has[sum] = true; } } printf("%d\n",ans); return 0; }