Pagini recente » Cod sursa (job #1422961) | Cod sursa (job #2423132) | Cod sursa (job #2939166) | Cod sursa (job #2630609) | Cod sursa (job #111665)
Cod sursa(job #111665)
/* Ivan Nicolae - Bucuresti */
/* Infoarena - Ordine */
#include <stdio.h>
#include <string.h>
#define NMAX 1000001
#define AMAX 30
#define ASCIIMAX 255
#define _fin "ordine.in"
#define _fout "ordine.out"
int i,n,m,j,A,M[ASCIIMAX];
char text[NMAX],rez[NMAX],alfa[AMAX];
void Quick(int li, int ls)
{
int i=li,j=ls;
char x=text[(li+ls)>>1], y;
while (i<=j)
{
while (text[i]<x) i++;
while (text[j]>x) j--;
if (i<=j)
{
y=text[i]; text[i]=text[j]; text[j]=y;
i++; j--;
}
}
if (i<ls) Quick(i,ls);
if (li<j) Quick(li,j);
}
int main()
{
freopen(_fin,"r",stdin);
freopen(_fout,"w",stdout);
gets(text);
n=strlen(text)-1;
Quick(0,n);
alfa[A++]=text[0];
for (i=1;i<=n;i++)
if (text[i] != text[i-1])
alfa[A++]=text[i];
for (i=0;i<=n;i++)
M[text[i]]++;
rez[0]=alfa[0]; M[rez[0]]--;
for (i=1;i<=n;i++)
for (j=0;j<=A;j++)
if (M[alfa[j]]>0 && alfa[j]!=rez[i-1])
{ rez[i]=alfa[j]; M[alfa[j]]--; break; }
printf("%s\n",rez);
fclose(stdin);
fclose(stdout);
return 0;
}