Cod sursa(job #111071)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 28 noiembrie 2007 16:32:13
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
#include<string.h>
long u,nr,maj,f[26];
int main()
{
int i,j,k;
char c,af;
freopen("ordine.in","r",stdin);
freopen("ordine.out","w",stdout);
while(scanf("%c",&c)!=EOF)
  {
  f[c-'a']++;
  ++nr;
  }

//pas 1
maj=(nr>>1)+1;
for(i=0;i<=25;i++)
  if(f[i]==maj)
	 {
	 for(j=0;j<=25;j++)
		if(j!=i)
		 while(f[j])
			{
			printf("%c%c",i+'a',j+'a');
			f[j]--;
			}
	 printf("%c",i+'a');
	 return 0;
	 }

//pas 2
af=' ';
u=0;
for(i=0;i<=25;i++)
  while(f[i])
	 {
	 maj=((nr-u)>>1)+1;
	 for(j=i+1;j<=25;j++)
		if(f[j]==maj)    //verificam dc exista un elem majoritar dupa i elem
		  {
		  for(k=0;k<=25;k++)
			 if(k!=j)
			  while(f[k])
				 {
				 printf("%c%c",j+'a',k+'a');
				 f[k]--;
				 }
		  printf("%c",j+'a');
		  return 0;
		  }
	 if((i+'a')!=af)
			 {
			 printf("%c",i+'a');
			 f[i]--;
			 u++;
			 af=i+'a';
			 }
	 else
			 { //este egal cu af
			 for(j=i+1;j<=25;j++)
				if(f[j])
				  {
				  printf("%c",j+'a');
				  u++;
				  af=j+'a';
				  f[j]--;
				  break;
				  }
		  }
	 }
return 0;
}