USACO 1.3 Calf Flac(枚举)

枚举+标记即可。

/*
 ID: cuizhe
 LANG: C++
 TASK: calfflac
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <map>
#include <algorithm>
using namespace std;
char str[30001],p[30001];
int o[30001];
int main()
{
    int i,j,len,num,ans,t1,t2,st,end;
    char ch;
    freopen("calfflac.in","r",stdin);
    freopen("calfflac.out","w",stdout);
    i = 0;
    while(scanf("%c",&ch)!=EOF)
    {
        str[i] = ch;
        i ++;
    }
    len = i-1;j = 0;
    for(i = 0;i <= len;i ++)
    {
        if(str[i] <= 'z'&&str[i] >= 'a')
        {
            o[j] = i;
            p[j++] = str[i];
        }
        else if(str[i] <= 'Z'&&str[i] >= 'A')
        {
            o[j] = i;
            p[j++] = str[i] + 32;
        }
    }
    num = j-1;ans = 0;
    for(i = 0;i <= num;i ++)
    {
        int temp = 0;
        st = i-1;
        end = i;
        while(st >= 0&&end <= num)
        {
            if(p[st] == p[end])
            temp += 2;
            else
            break;
            st --;
            end ++;
        }
        if(ans < temp)
        {
            ans = temp;
            t1 = o[st+1];
            t2 = o[end-1];
        }
        temp = 1;
        st = i-1;
        end = i+1;
        while(st >= 0&&end <= num)
        {
            if(p[st] == p[end])
            temp += 2;
            else
            break;
            st --;
            end ++;
        }
        if(ans < temp)
        {
            ans = temp;
            t1 = o[st+1];
            t2 = o[end-1];
        }
    }
    printf("%d\n",ans);
    for(i = t1;i <= t2;i ++)
    {
        printf("%c",str[i]);
    }
    printf("\n");
    return 0;
}
posted @ 2012-10-24 13:37  Naix_x  阅读(123)  评论(0编辑  收藏  举报