Pagini recente » Cod sursa (job #2690140) | Cod sursa (job #1900384) | Istoria paginii utilizator/sasasasasasa | Profil Sebi123 | Cod sursa (job #305220)
Cod sursa(job #305220)
#include<stdio.h>
#include<string>
#define dim 1000000
#define dimm 123
using namespace std;
char b[dim],a,xx,v[dim];
short int nr[dimm];
int main()
{int i=0,n,j,m=0,x=0,p=0;
FILE *f=fopen("ordine.in","r"), *g=fopen("ordine.out","w");
while(!feof(f))
{fscanf(f,"%c",&a);
i++;
nr[int(a)]++;} n=i;
for(i=97;i<=122;i++)
{pas1:
if(nr[i]==1) {b[m]=(char)i; m++; nr[i]--;}
if(nr[i]>1)
{b[m]=(char)i; m++; nr[i]--;
for(j=i+1;j<=122;j++)
pas2:if(nr[j]>0) {pas3: b[m]=(char)j; m++; b[m]=(char)i; m++; nr[i]--; nr[j]--;
if(nr[i]==0) goto pas1;
if(nr[j]==0) goto pas2;
else goto pas3;}
}}
for(i=122;i>=97;i--)
if(nr[i]>0) {x=nr[i]; nr[i]=0; xx=(char)i; break;}
for(i=m;i>=1;i--)
if(b[i]==xx) {p=i; if(b[i]<xx) break;}
p=p-x;n=0;
for(i=0;i<=m-1;i++)
{if((i>=p)&&(x>0))
{v[n]=xx; n++; v[n]=b[i]; n++; x--;
}
else {v[n]=b[i]; n++;}
}
for(i=n/2;i<=n-2;i++)
for(j=i+1;j<=n-1;j++)
if(v[j]<v[i]&&v[j+1]!=v[i]&&v[i-1]!=v[j]) {a=v[i];
v[i]=v[j];
v[j]=a; break;}
v[n]='\0';
fprintf(g,"%s\n",v);
fclose(f);
fclose(g);
return 0;
}