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

你可能感兴趣的:(HDU)