poj2185 Milking Grid

原来AC的代码错的...

#include <iostream>
#include<cstring>
using namespace std;
char p[ 10005][80];
short next[80],next1[10005];
int r,c;
void  getNext(char *p,int len)
{
    int j,k;
    next[0]=-1;
    j=0;
    k=-1;
    while(j<len)
	{
        if(k==-1||p[k]==p[j])
		{
            k++;
            j++;
            next[j]=k;
		}
        else
            k=next[k];
	}
}
void  getNextb(int len)
{
    int j,k;
    next1[0]=-1;
    j=0;
    k=-1;
    while(j<len)
	{
        if(k==-1||strcmp(p[k],p[j])==0)
		{
            k++;
            j++;
            next1[j]=k;
		}
        else
            k=next1[k];
	}
}
int main()
{
    int i,len,wide=0;
    //short num[10005][80];
    //char s[80];
    short num[10005];
    scanf("%d%d",&r,&c);
    for(i=0;i<r;i++)
    {
        scanf("%s",p[i]);
        len=c;
        getNext(p[i],len);
        /*num[i][0]=len-next[len];//zuixiaoxunhuanjie
        memcpy(s,p[i]+next[len],num[i][0]+1);
        len1=strlen(s);
        getNext(s,len1);
        int tem=len1-next[len1];
        int k=0;
        for(j=num[i][0];j<=len;j+=tem)
        {
            num[i][k++]=j;
        }*/
        num[i]=len-next[len];
        //cout<<num[i]<<endl;
        if(num[i]>wide)
        wide=num[i];
    }
    getNextb(r);
    int h=r-next1[r];
    //cout<<r<<" "<<h<<endl;
    cout<<h*wide<<endl;

    return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值