Cod sursa(job #272241)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 6 martie 2009 18:00:29
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<iostream.h>
#include<stdio.h>
#include<string.h>
FILE *f=fopen("ordine.in","r"),*g=fopen("ordine.out","w");
int c[30];
int main()
{
  int len,i,j;
  int max,jmax,s,next1,next2,last=0;
  char a[1000005];
  fscanf(f,"%s",&a);
  len=strlen(a);
  for(i=0;i<len;i++)
  {
    c[a[i]-'a'+1]++;
  }
  for(i=0;i<len;i++)
  {
    max=s=next1=next2=0;
    for(j=1;j<=26;j++)
    {
      if(c[j]&&!next1) next1=j;
      if(c[j]&&next1!=j&&!next2) next2=j;
      if(c[j]>max) max=c[j],jmax=j;
      s+=c[j];
    }
    s-=c[jmax];
    if(s>=max)
      if(next1!=last)
      {
	 fprintf(g,"%c",(next1+'a'-1));last=next1;c[next1]--;
      }
      else
	 {
	   fprintf(g,"%c",(next2+'a'-1));last=next2;c[next2]--;
	 }
   else
      {
	 fprintf(g,"%c",(jmax+'a'-1));last=jmax;c[jmax]--;
      }
  }
  return 0;
}