Pagini recente » Cod sursa (job #135375) | Cod sursa (job #74938) | Cod sursa (job #2593844) | Cod sursa (job #385639) | Cod sursa (job #37949)
Cod sursa(job #37949)
#include<fstream.h>
#include<string.h>
#define dim 2002
struct cif
{int nr;
int ap[dim];
int ok;
int luate;
};
cif v[10];
int l,lmax,lim;
char max;
char sir[2003],rez[dim],aux[dim];
void rec(int lp,int c)
{int x,y,i;
x=sir[c]-'0';
if((c<lim)&&(v[x].luate<v[x].nr))
{if((v[x].nr>1)
&&((v[x].ap[v[x].nr-1]-v[x].ap[v[x].luate+1])>=lmax)
&&(v[x].ap[v[x].nr]<lim))
{lp++;aux[lp]=sir[c];y=lim;lim=v[x].ap[v[x].nr];v[x].nr--;v[x].luate++;
rec(lp,c+1);lim=y;v[x].nr++;v[x].luate--;lp--;rec(lp,c+1);
}
else if((v[x].nr>0)&&(v[x].ap[v[x].nr]<lim))
{max=char('0'-1);
if(lp>1)
{y=aux[lp]-'0';
for(i=v[y].ap[v[y].luate]+1;i<v[y].ap[v[y].nr];i++)
if(sir[i]>max) max=sir[i];
lp++;aux[lp]=max;
}
else {lp++;aux[lp]=sir[c];}
if(lp>lmax){for(i=0;i<=lp;i++)rez[i]=aux[i];lmax=lp;}
else if(lp==lmax)
{for(i=0;i<=lp;i++)if(aux[i]<rez[i]) break;
if(i>lp) for(i=0;i<=lp;i++)rez[i]=aux[i];
}
}
}
else if(lp>lmax) {for(i=0;i<=lp;i++)rez[i]=aux[i];lmax=lp;}
else if(lp==lmax)
{for(i=0;i<=lp;i++)if(aux[i]<rez[i]) break;
if(i>lp) for(i=0;i<=lp;i++) rez[i]=aux[i];
}
}
int main()
{ifstream f("elimin2.in");
ofstream g("elimin2.out");
int i,x,j,y;
f.getline(sir,2003,'\n');f.close();
l=strlen(sir);
for(i=0;i<l;i++)
{x=sir[i]-'0';
if(!v[x].ok)
{v[x].ok=1;v[x].nr=1;v[x].ap[v[x].nr]=i;
for(j=i+1;j<l;j++)
{y=sir[j]-'0';
if(y==x) {v[x].nr++;v[x].ap[v[x].nr]=j;}
}
}
}
lim=l;
for(i=0;i<l;i++) if(sir[i]!='0'){lim=l;rec(-1,i);}
if(lmax%2)
{for(i=0;i<=lmax;i++) g<<rez[i];
for(i=lmax-1;i>=0;i--) g<<rez[i];
}
else
{for(i=0;i<=lmax;i++) g<<rez[i];
for(i=lmax;i>=0;i--) g<<rez[i];
}
g<<'\n';
g.close();
return 0;
}