Cod sursa(job #109916)

Utilizator FlorinC1996Florin C FlorinC1996 Data 25 noiembrie 2007 12:56:08
Problema Ordine Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasele 5-8 Marime 1.07 kb
#include<stdio.h>
#include<string.h>
char v[1000001],alf[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
void sterge(long i,long &n)
{
int j;
for(j=i;j<n;j++)
v[j]=v[j+1];
n--;
}
void insereaza(long copie,long j,long &n)
{
int i;
for(i=++n;i>j;i--)
v[i]=v[i-1];
v[j]=copie;
}
int main()
{
long n,i,elm,j,copie;
freopen("ordine.in","r",stdin);
freopen("ordine.out","w",stdout);
gets(v);
n=strlen(v);
elm=strlen(alf);
for(i=0;i<=n-1;i++)
	for(j=0;j<=elm;j++)
		if(v[i]==alf[j])
			{
			v[i]=j;
			break;
			}
int aux,sortat;
do
{
sortat=1;
for(i=0;i<=n-2;i++)
if(v[i]>v[i+1])
{
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
sortat=0;
}
}
while(sortat==0);
do
{
sortat=1;
for(i=0;i<=n-2 && sortat;i++)
	if(v[i]==v[i+1])
		for(j=i+2;j<=elm+1;j++)
			if(v[j]!=v[i])
			     {
			     copie=v[i];
			     sterge(i,n);
			     insereaza(copie,j,n);
			     sortat=0;
			     break;
			     }
}
while(sortat==0);
for(i=0;i<=n-1;i++)
printf("%c",alf[v[i]]);
fcloseall();
return 0;
}