字符数组hdu 4552

发一下牢骚和主题无关:

    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
字符和数组
---------------------------------

原文地址:https://www.cnblogs.com/xinyuyuanm/p/3098683.html