Cod sursa(job #526954)

Utilizator tudorsTudor Siminic tudors Data 30 ianuarie 2011 00:44:21
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <stdio.h>
using namespace std;
int n,ma;
char T[1000000];
int i,j;
int A[40];

int urm(int de_unde)
{
	int i;
	for (i=de_unde+1;i<=40;i++)
		if (A[i])
			return i;
	return 0;
}

int main()
{
	FILE * f;
	f=fopen("ordine.in","r");
	FILE * g;
	g=fopen("ordine.out","w");
	fgets(T,1000000,f);
	n=strlen(T);
	for (i=0;i<n;i++)
		A[T[i]-'a'+1]++;
	i=urm(0);
	j=urm(i);
	ma=j;
	while (ma!=0)
	{
		while (A[i] && A[j])
		{
			fprintf(g,"%c",char(i+'a'-1));
			fprintf(g,"%c",char(j+'a'-1));
			A[i]--;
			A[j]--;
		}
		if (!A[i])
		{
			i=urm(ma);
			ma=i;
			if (!i && urm(j))
			{
				fprintf(g,"%c",char(j+'a'-1));
				return 0;
			}
		}
		if (!A[j])
		{
			j=urm(ma);
			ma=j;
			if (!j && i)
			{
				fprintf(g,"%c",char(i+'a'-1));
				return 0;
			}
		}
	}
	fclose(f);
	fclose(g);
	return 0;
}