Cod sursa(job #532745)

Utilizator TowelieMilea Raluca Gabriela Towelie Data 12 februarie 2011 12:35:03
Problema Elimin 2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <stdio.h>
#include <math.h>
#include <string.h>
using namespace std;
int r[2002],a[2002],rr[2002];
char s[2002];
int palim()
{
    int i=0,j=strlen(s);
    while(r[i]==0 && i<strlen(s))i++;
    if(a[i]==0)return 0;
    i=0;
    while(i<j)
    {
        while(r[i]==0 && i<strlen(s))i++;
        while(r[j]==0 && j>=0)j--;
        if(a[i++]!=a[j--])return 0;
    }
    return 1;
}
void comp()
{
    int j1=0,j2=0,i,nr1=0,nr2=0;
    for(i=0;i<strlen(s);i++)
    {
        if(r[i]==1)nr1++;
        if(rr[i]==1)nr2++;
    }
    if(nr2<nr1)
        for(i=0;i<strlen(s);i++)rr[i]=r[i];
    else if(nr2==nr1)
    while(j1<=strlen(s)/2 && j2<=strlen(s)/2)
    {
        while(r[j1]==0 && j1<=strlen(s)/2)j1++;
        while(rr[j2]==0 && j2<=strlen(s)/2)j2++;
        if(a[j2++]<a[j1++])
                for(i=0;i<strlen(s);i++)rr[i]=r[i];
    }
}
int main()
{
    freopen("elimin2.in","r",stdin);
    freopen("elimin2.out","w",stdout);

    int i,j,nr=0;
    scanf("%s",s);
    for(i=0;i<strlen(s);i++)
        {a[i]=s[i]-'0';r[i]=1;}

    for(i=0;i<strlen(s);i++)r[i]=0;
    int flag=1;
    while(flag)
    {
        i=strlen(s)-1;
        while(r[i]==1 && i>=0)i--;
        if(i<0)flag=0;
        else
        {
            r[i]=1;
            for(j=i+1;j<strlen(s);j++)r[j]=0;
            if(palim())comp();
        }
    }

    for(i=0;i<strlen(s);i++)
    if(rr[i]==1)
        printf("%d",a[i]);



    return 0;
}