一道ACM题,字符串前缀,找不出递推的规律。解决办法
一道ACM题,字符串前缀,找不出递推的规律。
题目:http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1301
研究了大半天了。但本人太笨了。没总结出规律。呼唤牛人。
------解决方案--------------------
题目:http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1301
研究了大半天了。但本人太笨了。没总结出规律。呼唤牛人。
------解决方案--------------------
- C/C++ code
#include<iostream> #include<cstring> using namespace std; const int MM=1000000007; int dp[200005],next[200005]; char t[200005]; void GetNext(int len){ next[0]=-1; int i=0,j=next[i]; while(i<len){ if(j==-1 || t[i]==t[j]){ i++; j++; next[i]=j; } else j=next[j]; } } int main(){ int tt,len,sum; scanf("%d",&tt); while(tt--){ scanf("%s",t); len=strlen(t); GetNext(len); memset(dp,0,sizeof(dp)); sum=0; for(int i=1;i<=len;i++){ dp[i]=(dp[next[i]]+1)%MM; sum=(sum+dp[i])%MM; } printf("%d\n",sum); } return 0; }