Cod sursa(job #112102)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 3 decembrie 2007 09:14:23
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
long a[30],Suma;

void citire()
{
    freopen ("ordine.in","r",stdin);
    char c;
    scanf("%c",&c);
    while (!feof(stdin))
    {
      a[c-'a']++;
      scanf("%c",&c);
    }
    fclose(stdin);
}

void adun()
{
   for (int i=0;i<=26;i++)
      Suma+=a[i];
}

void afisare ()
{
    freopen ("ordine.out","w",stdout);
    int i=0,inc,sf;
    for (i=0;i<27;i++)
       if (a[i]!=0)
       {
	  inc=i;
	  break;
       }

    for ( i=i+1;i<=26;i++ )
	if (a[i]!=0)
	{
	   sf=i;
	   break;
	}

    while (Suma!=0)
    {
       int ok=1;
	if (a[inc]==0 || (inc>sf))
	{
	   int j=sf;
	   for (j=sf+1;j<=26;j++)
	       if (a[j]!=0)
	       {
		  inc=j;
		  break;
	       }

	       for (j=0;j<=26;j++)
		   if (a[j]!=0&&inc!=j)
		   {
		       ok=0;
		      sf=j;
		      break;
		   }
	}
	else{
       if (a[sf]==0)
       {
	  int i=sf+1;
	  for (;i<27;i++)
	     if (a[i]!=0)
	     {
		sf=i;
		ok=0;
		break;
	     }
       }
       else
	 ok=0;}
       if (ok==0){
	  a[inc]--;
	  a[sf]--;
	  Suma-=2;
	  printf("%c",inc+'a');
	  printf("%c",sf+'a');
      }

      if (ok==1)
      {
	 a[inc]--;
	 Suma--;
      }
    }
fclose(stdout);
}

int main()
{
   citire();
   adun();
   afisare();
return 0;
}