Cod sursa(job #637972)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 20 noiembrie 2011 17:51:39
Problema PalM Scor 40
Compilator cpp Status done
Runda .com 2011 Marime 2.07 kb
#include <stdio.h>
#include <cstring>
#include <cctype>
struct Date
{
    int inceput,lungime;
    bool special;
};
Date din[501];
int main()
{
    freopen("palm.in", "r",stdin);
    freopen("palm.out", "w",stdout);
    char s[501];
    scanf("%s",s+1);
    int lung = strlen(s+1);
    for(int i=1; i<=lung; i++)
    {
        int jmax=-1,lmax=-1,cmax=-1;
        int crestecu=0;
        for(int j=i-1; j>=1; j--)
        {
            if(s[j]>=s[i])
            {
                for(int k=din[j].inceput; k>=1; k--)
                {
                    if(s[k]==s[i])
                    {
                        if((din[j].lungime==1&&j==k&&din[j].inceput==j)||(s[i]==s[j]&&s[i]==s[din[j].inceput]&&din[j].special))//cazul bb, de exemplu
                        {
                            if(din[j].lungime+1>lmax||(din[j].lungime==lmax&&s[k]==s[i]))
                            {
                                crestecu=1;
                                lmax=din[j].lungime+1;
                                jmax=j;
                                cmax=k;
                            }

                        }
                        else if(din[j].lungime+2>lmax&&k<din[j].inceput)//nu poate fi altfel :/
                        {
                            lmax=din[j].lungime+2;
                            crestecu=2;
                            jmax=j;
                            cmax=k;
                        }
                    }
                }

            }
        }
        if(jmax!=-1)
        {
            din[i].inceput=cmax;
            din[i].lungime=din[jmax].lungime+crestecu;
            din[i].special=false;
            if(crestecu==1)
             din[i].special=true;
        }
        else
        {
            din[i].inceput=i;
            din[i].lungime=1;
        }

    }
    int lungmax=-1;
    for(int i=1; i<=lung; i++)
    {
        if(din[i].lungime>lungmax)
            lungmax=din[i].lungime;
        //printf("%d ",din[i].lungime);
    }
    printf("%d",lungmax);
    return 0;
}