递推式:d[i]=sum(d[i+len[x]])这道题的数据真狗血,改了一点就过了。
1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 using namespace std; 5 const int maxnode=4000*100+10; 6 const int mod=20071027; 7 const int maxn=300000 + 10; 8 const int maxw=4000 + 10; 9 char ss[maxn]; 10 char s[110]; 11 int d[maxn]; 12 int len[maxw]; 13 int ch[maxnode][26]; 14 int val[maxnode]; 15 int sz; 16 void insert(char *s,int v)//v需要为正数 17 { 18 int u=0,len=strlen(s); 19 for(int i=0;i<len;i++) 20 { 21 int c=s[i]-'a'; 22 if(!ch[u][c]) 23 { 24 memset(ch[sz],0,sizeof(ch[sz])); 25 ch[u][c]=sz++; 26 } 27 u=ch[u][c]; 28 } 29 val[u]=v; 30 } 31 void find(char *s,int len,vector<int>& p) 32 { 33 int u=0; 34 for(int i=0;i<len;i++) 35 { 36 if(s[i]=='