Cod sursa(job #267982)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 28 februarie 2009 16:42:47
Problema Ordine Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
#include<string.h>

char s[1000001];
int n,fol[30];

int este(int x)
{
  for (int i=1;i<=26;i++)
    if (fol[i]==(int)((n-x+1)/2)+1)
      return i;
  return 0;
}

int main()
{
  freopen("ordine.in","r",stdin);
  freopen("ordine.out","w",stdout);
  scanf("%s",&s);
  n=strlen(s);
  for (int i=0;i<n;i++)
    fol[s[i]-'a'+1]++;
  int nrc=1,x=1,v;
  for (int i=1;i<=26;i++)
    {
      int ok=0;
      if (este(x))
        {
          v=este(x);
          printf("%c",v+'a'-1);
          x++;
          fol[v]--;
          ok=1;
        }
      if (fol[i]>0)
        {
           if(v!=i)
             {printf("%c",i+'a'-1);
             x++;
             fol[i]--;
             }
          nrc=i+1;
          while (fol[i]!=0)
            {
              while ((fol[nrc]==0)&&nrc<26)
                nrc++;
              printf("%c",nrc+'a'-1);
              fol[nrc]--;x++;
              if(este(x)) {i--;
               break;}
              printf("%c",i+'a'-1);
              fol[i]--;x++;
            }
        }
    }
  printf("\n");
  return 0;
}