Cod sursa(job #113228)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 9 decembrie 2007 12:20:13
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <string.h>
using namespace std;
long a[37],nr;
char sir[1000003];

void citire()
{
   ifstream fin("ordine.in");
   char c;
   fin.get(c);
   while (c!='\n')
   {
      a[c-'a']++;
      fin.get(c);
      nr++;
   }

fin.close();
}

int caut(int x)
{
    for (int i=0;i<27;i++)
	if (a[i]==(nr-x+1)/2+1)
	   return i;
return -1;
}

void formare()
{
   sir[0]='a'+28;
  for (long i=1;i<=nr;i++)
  {
     long x=caut(i);
     if (x!=-1)   {
	sir[i]=x+'a';
	a[x]--;}
     else
       for (int j=0;j<27;j++)
	  if (a[j]!=0)
	    if (j!=sir[i-1]-'a'){
	       sir[i]=j+'a';
	       a[j]--;
	       break;
	    }
  }
}

int main()
{
   citire();
   formare();
   ofstream fout("ordine.out");
   for (long i=1;i<=nr;i++)
      fout<<sir[i];
   fout<<"\n";
   fout.close();
   return 0;
}