发一下牢骚和主题无关:
hdu3336一样的题目
kmp+dp可以做.
队友的思绪,开一个数组记录与前一个字符相称的下表,
每次只要比拟与上个字符相称下表+1的字符是否相称
#include<stdio.h> #include<string.h> int a[100001]; int main() { int i,j,k,p,len; char s[100001]; while(scanf("%s",s)!=-1) { len=strlen(s); int sum=len; j=0; for(i=1;s[i];i++) if(s[i]==s[0]) a[j++]=i; sum+=j; for(i=1;s[i];i++) { for(p=0,k=0;k<j&&k+1<len;k++) if(s[a[k]+1]==s[i]) a[p++]=a[k]+1; sum+=p;j=p; } printf("%d\n",sum%256); } return 0; }
KMP+Dp
#include<stdio.h> #include<string.h> #define N 100010 int dp[N],next[N],n; char s[N]; void get() { next[1]=0; int i,j=0; for(i=2;i<=n;i++) { while(j>0&&s[i]!=s[j+1]) j=next[j]; if(s[i]==s[j+1]) j++; next[i]=j; } } int main() { int i,j; while(scanf("%s",s+1)!=-1) { n=strlen(s+1); get(); dp[0]=0; int sum=0; for(i=1;i<=n;i++) { //printf("%d ",next[i]); dp[i]=(dp[next[i]]+1)%256; sum=(sum+dp[i])%256; } printf("%d\n",sum); } return 0; }
文章结束给大家分享下程序员的一些笑话语录: 真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。
--------------------------------- 原创文章 By
字符和数组
---------------------------------