Pagini recente » Monitorul de evaluare | Cod sursa (job #2187079) | Profil denisa0230 | Cod sursa (job #2704967) | Cod sursa (job #2002077)
#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++)
{
best[l][i]=max(best[l-1][i],best[l-1][i+1]);
if(s[i]==s[i+l-1]&&best[l-2][i+1]+2>best[l][i])
{
best[l][i]=best[l-2][i+1]+2;
if(s[i]!='0'&&best[l][i]>maxim)
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;
}