Pagini recente » Cod sursa (job #20501) | Cod sursa (job #153283) | Cod sursa (job #3158942) | Cod sursa (job #3294253) | Cod sursa (job #37830)
Cod sursa(job #37830)
#include <fstream.h>
#include <string.h>
char s[2003],w[1002],v[1002],max;
int l,k,lmax,x,ok;
void pal(int i,int j,int k)
{while(i<j){if(!k)while(!s[i]) i++;
if(s[i]==s[j]){w[k]=s[i];pal(i+1,j-1,k+1);}
else {max=-1;ok=0;
for(int q=i;q<=j;q++)if(s[q]>max){max=s[q];ok=1;}
int x=2*k+ok;
if(x>lmax)
{lmax=x;
for(q=0;q<k;q++)
v[q]=v[lmax-q-1]=w[q];
if(ok)v[q]=max;}
else if(x==lmax){q=0;
while((w[q]<=v[q])&&(q<k))
q++;
if(q==k){if((ok)&&(max>v[k]))for(q=0;q<k;q++)v[q]=v[lmax-q]=w[q];v[q]=max;}
else {for(q=0;q<k;q++)v[q]=v[lmax-q]=w[q];if(ok)v[q]=max;}
}
pal(i,j-1,k);
}
i++;
}
max=-1;ok=0;
for(int q=i;q<=j;q++)if(s[q]>max){max=s[q];ok=1;}
int x=2*k+ok;
if(x>lmax)
{lmax=x;
for(q=0;q<k;q++)
v[q]=v[lmax-q-1]=w[q];
if(ok)v[q]=max;}
else if(x==lmax){q=0;
while((w[q]<=v[q])&&(q<k))
q++;
if(q==k){if((ok)&&(max>v[k]))for(q=0;q<k;q++)v[q]=v[lmax-q]=w[q];v[q]=max;}
else {for(q=0;q<k;q++)v[q]=v[lmax-q]=w[q];if(ok)v[q]=max;}
}
}
int main()
{ifstream f("elimin2.in");
f.getline(s,2002,'\n');
f.close();
l=strlen(s);
x=l/2;
ok=0;
for(k=0;k<x;k++)
{if(s[k]==s[l-k-1])v[k]=v[l-k-1]=s[k];
else {ok=1;break;}
}
if(ok)pal(0,l-1,0);
else {if(l%2)v[x]=s[x];lmax=l;}
/*int i,j,n=l-1,q,ii=0,jj;ok=1;
while(ok)
{jj=n;k=0;
for(i=ii;i<jj;i++)
{j=jj;
while(i<j)
{if(s[i]==s[j]){w[k]=s[i];jj=j-1;k++;break;}j--;}
}
max=-1;
for(q=i+1;q<j;q++)if(s[q]>max)max=s[q];
if(max>-1){if((2*k+1)>lmax){lmax=2*k+1;for(q=0;q<k;q++)v[q]=w[q];v[q]=max;}}
else {if((2*k+1)>lmax){lmax=2*k+1;for(q=0;q<k;q++)v[q]=w[q];}}
ii++;while(!s[ii])ii++;
if((l-ii)<lmax)ok=0;
}*/
v[lmax]='\n';
ofstream g("elimin2.out");
g<<v<<'\n';
g.close();
return 0;
}