题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4552
题解:此题与hdu3336一样。见http://blog.youkuaiyun.com/lezg_bkbj/article/details/11020233
#include <stdio.h>
#include <string.h>
#define MAXN 100002
#define MOD 256
char text[MAXN];
int next[MAXN],dp[MAXN];
void getNext()
{
int i=0,j=-1;
next[0]=-1;
while(text[i]!='\0')
{
if(j==-1||text[i]==text[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int main()
{
int i,sum,len;
while(scanf("%s",text)!=EOF)
{
memset(dp,0,sizeof(dp));
getNext();
sum=0;
len=strlen(text);
for(i=1;i<=len;++i)
{
dp[i]=(dp[next[i]]+1)%MOD;
sum=(sum+dp[i])%MOD;
}
printf("%d\n",sum);
}
return 0;
}