标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7190 Accepted Submission(s): 3318
1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 #include<stdlib.h> 6 #include<queue> 7 #include<cstdio> 8 #include<math.h> 9 void next1(int k); 10 char str[300000]; 11 int next2 [300000]; 12 char strr[300000]; 13 int dp[300000]; 14 const int mod= 10007; 15 using namespace std; 16 int main(void) 17 { 18 int i,j,k,p,q; 19 scanf("%d",&k); 20 while(k--) 21 { 22 int sum=0; 23 scanf("%d",&p); 24 scanf("%s",str); 25 int l=strlen(str); 26 for(i=0; i<l; i++) 27 {strr[i+1]=str[i];} 28 next1(l); 29 for(i=1; i<=l; i++) 30 { 31 dp[i]=(dp[next2[i]]+1)%mod; 32 sum=(sum+dp[i])%mod; 33 } 34 printf("%d\n",sum); 35 } 36 return 0; 37 } 38 39 void next1(int k) 40 { 41 int i,j; 42 next2[0]=0; 43 next2[1]=0; 44 j=0;int cnt=0; 45 for(i=2; i<=k; i++) 46 { 47 while(j>0&&strr[j+1]!=strr[i]) 48 { 49 j=next2[j]; 50 } 51 if(strr[j+1]==strr[i]) 52 { 53 j++; 54 } 55 next2[i]=j;cnt++; 56 } 57 }
标签:
原文地址:http://www.cnblogs.com/zzuli2sjy/p/5187037.html