标签:
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 990 Accepted Submission(s):
478
#include<stdio.h> #include<string.h> #define MAX 100100 #define mod 256 int next[MAX]; char str[MAX]; int dp[MAX]; int len,s; void getfail() { int i,j; next[0]=next[1]=0; for(i=1;i<len;i++) { j=next[i]; while(j&&str[i]!=str[j]) j=next[j]; next[i+1]=str[i]==str[j]?j+1:0; } } void kmp() { int i,j; dp[0]=0; for(i=1;i<=len;i++) { dp[i]=(dp[next[i]]%mod+1)%mod; s=(s%mod+dp[i]%mod)%mod; } } int main() { while(scanf("%s",str)!=EOF) { s=0; len=strlen(str); getfail(); kmp(); printf("%d\n",s); } return 0; }
hdoj 4552 怪盗基德的挑战书【求前缀在字符串中出现的次数之和】
标签:
原文地址:http://www.cnblogs.com/tonghao/p/4711792.html