题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4552
题解:此题与hdu3336一样。见http://blog.csdn.net/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;
}
本文提供了一道来自HDU在线评测系统的编程题(编号4552)的解答思路及完整代码实现。该题与HDU 3336相似,采用字符串匹配算法解决。代码中使用了KMP算法来预处理模式串,并通过动态规划计算答案。

1589

被折叠的 条评论
为什么被折叠?



