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