Pagini recente » Istoria paginii utilizator/ursuldragos | Cod sursa (job #1689569) | Cod sursa (job #187066) | Cod sursa (job #713648) | Cod sursa (job #2002070)
#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;
}