Cod sursa(job #679611)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 13 februarie 2012 16:10:14
Problema Ordine Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<cstdio>
#include<cstring>
int i,n,x[27],t,j,k;
char s[1000002],l[1000002],o;
int main()
{FILE *f=fopen("ordine.in","r"),*g=fopen("ordine.out","w");
fgets(s,1000002,f);
n=strlen(s)-1;
for(i=0;i<n;i++)
     x[s[i]-'a']++;
for(i=0;i<26;i++)
for(j=0;j<x[i];j++)
     s[k++]=i+'a';
for(i=0;i<n;i++)
     {for(k=-1,j=0;j<26;j++)
     if(x[j]>(n-i)/2)
           k=j;
     if(k>-1)
           {for(t=i;t<n&&s[t]!=k+'a';t++);
           l[i]=k+'a',o=s[i],s[i]=s[t],s[t]=o,x[k]--;}
     else
           {for(t=i;i&&l[i-1]==s[t];t++);
           if(x[s[t]-'a'])
                l[i]=s[t],o=s[i],s[i]=s[t],s[t]=o,x[l[i]-'a']--;}}
fputs(l,g);  
return 0;}