usaco 1.3 Calf Flac(暴搜)

思路是暴搜。

需要注意的地方是输入的方法,以及输出时的换行。

代码:

/*
ID: who jay
LANG: C++
TASK: calfflac
*/

#include<stdio.h>
#include<string.h>
#include<math.h>

int main()
{
    freopen("calfflac.in","r",stdin);
    freopen("calfflac.out","w",stdout);
    char s[20001]= {0},cr[20001]= {0};
    int i;
    int len;
    int maxlen=0,maxu,maxv,u,v,tmplen;
    char line[81];
    while(gets(line)!=NULL)
    {
        strcat(s,line);
        cr[strlen(s)-1]=1;
    }
    len=strlen(s);
    for(i=0; i<len; i++)
    {
        if((s[i]<'A')||(s[i]>'Z')&&(s[i]<'a')||(s[i]>'z'))
            continue;

        //奇数时
        u=v=i;
        tmplen=-1;
        while((u>=0)&&(v<=len-1))
        {
            if((s[u]!=s[v])&&(fabs(s[u]-s[v])!=32))
                break;
            tmplen+=2;
            if(tmplen>maxlen)
            {
                maxlen=tmplen;
                maxu=u;
                maxv=v;
            }

            u--;
            v++;

            while((u>=0)&&((s[u]<'A')||(s[u]>'Z')&&(s[u]<'a')||(s[u]>'z')))
                u--;
            while((v<=len-1)&&((s[v]<'A')||(s[v]>'Z')&&(s[v]<'a')||(s[v]>'z')))
                v++;
        }

        //偶数时
        u=i;
        v=i+1;
        tmplen=0;
        while((u>=0)&&(v<=len-1))
        {
            if((s[u]!=s[v])&&(fabs(s[u]-s[v])!=32))
                break;
            tmplen+=2;
            if(tmplen>maxlen)
            {
                maxlen=tmplen;
                maxu=u;
                maxv=v;
            }
            u--;
            v++;

            while((u>=0)&&((s[u]<'A')||(s[u]>'Z')&&(s[u]<'a')||(s[u]>'z')))
                u--;
            while((v<=len-1)&&((s[v]<'A')||(s[v]>'Z')&&(s[v]<'a')||(s[v]>'z')))
                v++;
        }

    }
    printf("%d\n",maxlen);
    for(i=maxu; i<=maxv; i++)
    {
        printf("%c",s[i]);
        if(cr[i]==1) printf("\n");
    }
    if(cr[maxv]!=1) printf("\n");
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值