Pagini recente » Cod sursa (job #2010296) | Cod sursa (job #2981617) | Cod sursa (job #2221649) | Cod sursa (job #2279673) | Cod sursa (job #1510261)
#include <cstdio>
#define MAXN 2001
int v[MAXN],scm[MAXN],lung[MAXN],next[MAXN],poz[MAXN],vf[10],cifmax[MAXN+1],poz1[MAXN+1],v1[MAXN];
int main(){
FILE*fi,*fout;
int i,con,flag,j,n,max,con1,aux,x;
char a;
fi=fopen("elimin2.in" ,"r");
fout=fopen("elimin2.out" ,"w");
a=fgetc(fi);
n=0;
while(a>='0'&&a<='9'){
v[n++]=a-'0';
a=fgetc(fi);
}
con=0;
for(i=0; i<n-1; i++){
j=n-1;
con1=0;
flag=1;
while(flag&&j>i&&con1<=vf[v[i]]){
if(v[i]==v[j])
con1++;
if(con1==vf[v[i]]+1){
scm[con]=j;
poz[con++]=i;
flag=0;
vf[v[i]]++;
}
j--;
}
}
if(con>0){
max=1;
for(i=con-1; i>=0; i--){
lung[i]=1;
for(j=i+1; j<con; j++)
if(scm[i]>scm[j]&&lung[i]<lung[j]+1){
lung[i]=lung[j]+1;
next[i]=j;
}
if(lung[i]>max)
max=lung[i];
if(v[scm[i]]>cifmax[lung[i]]){
cifmax[lung[i]]=v[scm[i]];
poz1[lung[i]]=i;
}
// printf("%d %d %d %d\n" ,poz[i],scm[i],lung[i],v[scm[i]]);
}
i=max;
while(cifmax[max]==0)
max--;
con=0;
x=poz1[max];
while(con<max){
fprintf(fout,"%d" ,v[scm[x]]);
v1[con++]=v[scm[x]];
aux=x;
x=next[x];
}
max=0;
for(i=poz[aux]+1; i<scm[aux]; i++)
if(max<v[i])
max=v[i];
if(poz[aux]+1<scm[aux])
fprintf(fout,"%d" ,max);
for(i=con-1; i>=0; i--)
fprintf(fout,"%d" ,v1[i]);
}
else{
max=0;
for(i=0;i<n;i++)
if(v[i]>max)
max=v[i];
fprintf(fout,"%d" ,max);
}
fclose(fi);
fclose(fout);
return 0;
}