Pagini recente » Cod sursa (job #1236001) | Cod sursa (job #2516669) | Cod sursa (job #3004631) | Cod sursa (job #932706) | Cod sursa (job #112436)
Cod sursa(job #112436)
#include<fstream.h>
#include<string.h>
ifstream f("ordine.in");
ofstream g("ordine.out");
char a[100000],d[100000],b[26];
int k,j,ga;
void bordare()
{int q=0;
for(char i='a';i<='z';i++)
b[q++]=i;
}
int cauta(int x,int c[26], int &j)
{
for(int i=x;i<=k;i++)
c[a[i]-'a']++;
int max=c[0];j=0;
for(i=1;i<=25;i++)
if(c[i]>max)
{max=c[i];j=i;}
return max;
}
void sortare()
{int t=strlen(d)-1,ga=0,z=t-1;
while(!ga)
{ga=1;
for(int l=1;l<=z;l++)
if(d[l]>d[l+1])
{char v=d[l];d[l]=d[l+1];d[l+1]=v;ga=0;}
z--;
}
}
void inser(int x,int j)
{int q=0;
for(int i=x;i<=k;i++)
if(a[i]!=b[j])
d[q++]=a[i];
for(int s=x;s<=k;s+=2)
a[s]=b[j];
sortare();
q=0;
for(s=x+1;s<=k;s+=2)
a[s]=d[q++];
}
char minim(int x,int &j,char p)
{int min='z'+'1';
for(int y=x;y<=k;y++)
if(a[y]!=p&&a[y]<min)
{min=a[y];j=y;}
return min;
}
int c[26];
int main()
{
f>>a;
bordare();
k=strlen(a)-1;
if(cauta(0,c,j)==(k+1)/2+1)
{inser(0,j);ga=1;}
else
{char u=a[0];
a[0]=minim(0,j,'A');
a[j]=u;
}
for(int i=1;i<=k&&!ga;i++)
if(cauta(i,c,j)==(k-i+1)/2+1)//cauta() vede daca un caracter apare de jumatate+1 ori
{inser(i,j);ga=1;}
else
{char u=a[i];
a[i]=minim(i,j,a[i-1]);
a[j]=u;
}
g<<a;
return 0;
}