poj1200
这题用hash做。算法导论上面讲的很清楚
1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 char s[16000005]; 5 int a[100000]; 6 int hash[16000005]; 7 int main() 8 { 9 int n,nc; 10 11 memset(hash,0,sizeof(hash)); 12 memset(a,0,sizeof(a)); 13 scanf("%d %d ",&n,&nc); 14 scanf("%s",s); 15 int sum=0; 16 int count=0; 17 int len=strlen(s); 18 for(int i=0;i<len;i++) 19 { 20 if(a[s[i]]==0) 21 a[s[i]]=++count; 22 } 23 int ans=0; 24 for(int i=0;i<len-n+1;i++) 25 { 26 //int mod=1; 27 sum=0; 28 for(int j=i;j<i+n;j++) 29 { 30 sum=sum*nc+a[s[j]]; 31 } 32 //sum=sum%mod; 33 if(hash[sum]==0) 34 { 35 ans++; 36 hash[sum]=1; 37 } 38 } 39 printf("%d\n",ans); 40 return 0; 41 }
嗯