Time Limit: 1000MS | Memory Limit: 65536KB | 64bit IO Format: %I64d & %I64u |
Description
Your task is to write a program that given the size, N, of the substring, the number of different characters that may occur in the text, NC, and the text itself, determines the number of different substrings of size N that appear in the text.
As an example, consider N=3, NC=4 and the text "daababac". The different substrings of size 3 that can be found in this text are: "daa"; "aab"; "aba"; "bab"; "bac". Therefore, the answer should be 5.
Input
Output
Sample Input
3 4
daababac
Sample Output
5
Hint
Source
RE到飞起,改了半天,标准代码比对无效。
然后发现数组开了160w……为什么我会把16 Millions理解错160w呢……
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namespace std; 7 int n,nc; 8 int mp[300],cnt; 9 char s[16000100]; 10 bool hash[16000100]; 11 int main(){ 12 scanf("%d%d",&n,&nc); 13 scanf("%s",s); 14 int i,j; 15 int len=strlen(s)-1; 16 for(i=0;i<=len;i++) 17 if(!mp[s[i]])mp[s[i]]=++cnt; 18 int ans=0; 19 for(i=0;i<=len-n+1;i++){ 20 int hs=0; 21 for(j=i;j<n+i;j++){ 22 hs*=nc; 23 hs+=mp[s[j]]; 24 } 25 if(!hash[hs])hash[hs]=1,ans++; 26 } 27 printf("%d\n",ans); 28 return 0; 29 }