Cod sursa(job #197508)

Utilizator sigridMaria Stanciu sigrid Data 4 iulie 2008 16:03:06
Problema Ordine Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream.h>
#include<string.h>
#define dim 1000002
#define dim2 30


char sir[dim];
int a[dim];
unsigned long n,i,j,cul,l;
long sf;


int main()
{
ifstream f("ordine.in");
ofstream g("ordine.out");

f.getline(sir,dim,'\n');
f.close();


n=strlen(sir);


for(i=0;i<n;i++)
 {
  if(!a[sir[i]-'a'+1]) cul++;

  a[sir[i]-'a'+1]++;
 }


for(i=0;i<=n;i++) sir[i]=(char)1;



sf=0;
for(i=1;i<dim2;i++)
 {
  while( a[i] && (cul!=1) )
   {

    sf++;
    sir[sf]='a'+i-1;

    a[i]--;
    if(a[i]==0) cul--;

    if(a[i])
     for(j=i+1;j<dim2;j++)
      if(a[j])
       {
	sf++;
	sir[sf]='a'+j-1;

	a[j]--;
	if(a[j]==0) cul--;

	break;
       }
   }

 }


if(cul==1)
{
for(j=1;j<dim2;j++)
if(a[j])
{if(sir[sf]!=(j+'a'-1))
  {sf++;
   sir[sf]=j+'a'-1;
   a[j]--;
  }
 while(a[j])
  {
      {
       for(i=sf;i>=1;i--)
	if( (sir[i]!=(j+'a'-1))&&(sir[i-1]!=(j+'a'-1)) )
	  {
	   sf++;

	   for(l=sf;l>i;l--)
	    sir[l]=sir[l-1];

	   sir[i]=j+'a'-1;
	   a[j]--;

	   break;
	  }
      }

  }
}
}

//g<<sir;
for(i=1;i<=n;i++) g<<sir[i];
g<<'\n';

g.close();

return 0;
}