Mai intai trebuie sa te autentifici.

Cod sursa(job #2002069)

Utilizator Bodo171Bogdan Pop Bodo171 Data 18 iulie 2017 15:53:53
Problema Elimin 2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <iostream>
#include <fstream>
using namespace std;
short best[2005][2005],lst[2005][10],fst[2005][10];
short mx;
bool afis[2005];
string s;
int len,i,j,l,maxim,st,dr,r,L;
bool brk;
int main()
{
    ifstream f("elimin2.in");
    ofstream g("elimin2.out");
    f>>s;len=s.size();
    s=' '+s;
    for(i=1;i<=len+1;i++)
    {
        for(j=0;j<10;j++)
            if(!lst[i][j])
                lst[i][j]=lst[i-1][j];
        if(i<=len)lst[i+1][s[i]-'0']=i;
    }
    for(i=len;i>=0;i--)
    {
        for(j=0;j<10;j++)
            if(!fst[i][j])
            fst[i][j]=fst[i+1][j];
        if(i>0)fst[i-1][s[i]-'0']=i;
    }
    for(i=1;i<=len;i++)
        best[1][i]=1;
    maxim=1;
    for(l=2;l<=len;l++)
        for(i=1;i<=len-l+1;i++)
            if(s[i]==s[i+l-1])
    {
         mx=0;
         for(j=0;j<10;j++)
         {
             st=fst[i][j];dr=lst[i+l-1][j];
             if(st<=dr)
                mx=max(mx,best[dr-st+1][st]);
         }
         mx+=2;
         best[l][i]=mx;
         if(best[l][i]>maxim&&s[i]!='0')
            maxim=best[l][i];
    }
    L=maxim;l=0;r=len+1;
    while(L>0)
    {
        brk=0;
        for(j=9;j>=0&&brk==0;j--)
        {
            st=fst[l][j];dr=lst[r][j];
            if(st<=dr&&best[dr-st+1][st]==L)
            {
                brk=1;
                afis[st]=afis[dr]=1;
                l=st;r=dr;L-=2;
            }
        }
    }
    for(i=1;i<=len;i++)
        if(afis[i])
          g<<s[i];
    return 0;
}