Pagini recente » Cod sursa (job #328137) | Cod sursa (job #759860) | Cod sursa (job #1901742) | Clasament teo.contest | Cod sursa (job #306929)
Cod sursa(job #306929)
#include<fstream>
#include<string>
using namespace std;
char v[1000000];
int a[27];
int main()
{int i,j,k,y1,ok,t,x,max,k1,y,j1;
char c;
ifstream f("ordine.in");
ofstream g("ordine.out");
k=0;max=0;
while(f>>c)
{x=(int)c-(int)'a'+1;
a[x]++;
//if(a[x]>max)max=a[x],nr=x;
}
/*i=1;
while(a[i]==0)
i++;
k=0;
while (a[i]!=0)
v[++k]=(char)((int)'a'+i-1);
i++;k=1;
while(i<=max)
{while(a[i]==0)i++;
while(a[i]!=0)
{if(v[k]!=i)&&)
}
}
*/
//k1=a[nr];
i=1;t=0;
while(a[i]==0)i++;
v[++t]=(char)((int)'a'+i-1);
a[i]--;
k=a[i];ok=1;
while(i<=26)
{while(a[i]!=0)
{if(k==1)
{v[++t]=(char)((int)'a'+i-1);
a[i]--;
/*j=i+1;
while(v[j]==0)
j++;
g<<(char)((int)'a'+j-1);
v[j]--;ok=1;*/
}
else if(k>1&&ok==1)
{j=i+1;
while(a[j]==0)
j++;
v[++t]=(char)((int)'a'+j-1);
a[j]--;
v[++t]=(char)((int)'a'+i-1);
a[i]--;
}
else if((k>1)&&(a[i]==k))
{v[++t]=(char)((int)'a'+i-1);
a[i]--;
j=i+1;
while(a[j]==0)
j++;
v[++t]=(char)((int)'a'+j-1);
a[j]--;
v[++t]=(char)((int)'a'+i-1);
a[i]--;
ok=1;
}
}
i++;k=a[i];ok=0;
}
//i=27;
//while(a[i]==0)i--;
/*k1=a[i];nr=(int)'a'+i-1;
i=t;k=0;
while(v[i]!=(char)nr)i-=2,k++;
if(a[max]!=0)
{k=a[max]-1;
i=1;x=t;
while(i<=x) i++;
}
x=i;
*/
/*j=t-1;
while(a[i]!=0)
{if((v[j+1]!=v[j])&&(v[j-1]!=v[j]))
{t++;
for(k=t;k<=k;k--)
v[k+1]=v[k];
v[j]=(char)((int)'a'+i);
a[i]--;
}
j--;
}*/
j=t-1;
y=(int)v[j]-(int)'a'+1;
if(y>26||y<0){
k=0;
while(y>26||y<0)k++,j-=2,y=(int)v[j]-(int)'a'+1;
j=t-2;k1=0;y=(int)v[t];
while(v[j]==(char)y)k1++,j-=2;
k1--;
j=t-k1*2+1;x=k;
y1=t-2*k+1;//k1=1;
for(j1=y1;j1>=j-1;j1--)
v[j1+k]=v[j1];
//v[j1+k-1]=(char)y;
// y1=j1+k-2;
// j-=2;//k1++;
//k--;
while(k>0)
{
//for(j1=y1;j1>=j-1;j1--)
// v[j1+k+1]=v[j1];
v[j1+k-1]=(char)y;
y1=j1+k-2;
j-=2;//k1++;
k--;
for(j1=y1;j1>=j-1;j1--)
v[j1+k+1]=v[j1];
}
v[j1+k+1]=(char)y;
for(i=1;i<=t-x;i++) g<<v[i];
}
else
for(i=1;i<=t;i++) g<<v[i];
//for(i=x+1;i<=t;i++)
//g<<(char)((int)'a'+max-1)<<v[i];
g<<'\n';
f.close();
g.close();
return 0;
}