Cod sursa(job #353581)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 5 octombrie 2009 17:43:55
Problema Elimin 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
#include<string.h>
#define DIM 2005
char a[DIM],sol1[DIM/2],sol2[DIM/2];
int n,v[DIM][DIM],b[DIM][DIM],q;
int max (int x,int y)
{
    if(x<y)
        return y;
    return x;
}
void pal (int i,int j)
{
    if(v[i][j])
        return ;
    v[i][j]=1;
    if(i>j)
        return ;
    if(i==j)
    {
        b[i][j]=1;
        return ;
    }
    if(a[i]==a[j])
    {
        sol1[++q]=i;
        sol2[q]=j;
        pal (i+1,j-1);
        b[i][j]=2+b[i+1][j-1];
        return ;
    }
    pal (i+1,j);
    pal (i,j-1);
    b[i][j]=max(b[i+1][j],b[i][j-1]);
}
int main ()
{
    freopen("elimin2.in","r",stdin);
    freopen("elimin2.out","w",stdout);
    int i,j;
    while(scanf("%c",&a[++n])!=EOF);
    n-=2;
    pal (1,n);
    j=0;
    if(a[sol1[1]]=='0')
        j=1;
    if(1+j==q && j==1)
    {
        if(sol1[1]!=1)
            printf("%c",a[sol1[1]-1]);
        else
            printf("%c",a[sol2[1]+1]);
        return 0;
    }
    for(i=1+j;i<=q;++i)
        printf("%c",a[sol1[i]]);
    if(sol1[q]<sol2[1])
        printf("%c",a[sol1[q]+1]);
    for(i=q;i>j;--i)
        printf("%c",a[sol2[i]]);
    return 0;
}