Cod sursa(job #112083)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 3 decembrie 2007 02:23:41
Problema Ordine Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include<stdio.h>
#include<string.h>
char cit[1000010],a[30],*c,lt,cf;
long int i,j,fr[30],l,r,poz,k;
int main()
{
	FILE *f,*g;f=fopen("ordine.in","r");g=fopen("ordine.out","w");
	c=&cit[0];
	fscanf(f,"%s",c);
	l=strlen(c);
	for(i=0;i<26;i++)a[i]=(char)i+'a';
	for(i=0;i<l;i++)
	 fr[(long int)(c[i]-'a')]++;
	for(i=0;i<26;i++)
	 if(fr[i]) { fr[j]=fr[i];a[i]=a[j];j++;}
	a[j]=0;j--;
	if(fr[j]==l-fr[j]+1)
	{ fprintf(g,"%c",a[j]);fr[j]--;
	  poz=0;
	  for(i=1;i<=fr[j];i++)
	   { fprintf(g,"%c%c",a[poz],a[j]);fr[poz]--;
	     if(!fr[poz])poz++;
	   }
	  fprintf(g,"\n");
	  fcloseall();
	  return 0;
	}
	while(l-fr[j]>fr[j])
	{
		if(lt!=a[0])
		{ fprintf(g,"%c",a[0]); lt=a[0];fr[0]--;l--;
		  if(!fr[0])
		  { for(i=0;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
		    j--;
		  }
		}
		else
		{ fprintf(g,"%c",a[1]) ;lt=a[1];fr[1]--;l--;
		  if(!fr[1])
		  { for(i=1;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
		    j--;
		  }
		}
	}
	if(j==1)
	{
		while(l)
		{ if(lt!=a[0]) fprintf(g,"%c",a[0]);
		  else fprintf(g,"%c",a[1]);
		  l--;
		}
		fprintf(g,"\n");
		fcloseall();
		return 0;
	}
	if(lt!=a[0])
	{       poz=0;
		while(l)
		{ fprintf(g,"%c%c",a[poz],a[j]);fr[poz]--;fr[j]--;l-=2;
		  if(!fr[poz])poz++;}
		fprintf(g,"\n");
		fcloseall();
		return 0;
	}
	if(j>1)
	{       fprintf(g,"%c%c",a[1],a[j]);fr[1]--;fr[j]--;l-=2;
		poz=0;
		while(l)
		{       if(!fr[poz])poz++;
			fprintf(g,"%c%c",a[poz],a[j]);fr[poz]--;fr[j]--;l-=2;
		}
		fprintf(g,"\n");
		fcloseall();
		return 0;
	}
	fprintf(g,"\n");
	fcloseall();
	return 0;
}