Cod sursa(job #127495)

Utilizator slayer4uVictor Popescu slayer4u Data 24 ianuarie 2008 09:51:58
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#include <string.h>

long found, i, j, prev, n, count[30];
char s[1000100];

int main()
{
	freopen ("ordine.in", "rt", stdin);
	freopen ("ordine.out", "wt", stdout);

	fgets(s, 1000100, stdin);

	n = strlen(s) - 1;
	if (s[n] == '\n')
		n --;

	for (i = 0; i <= n; i ++)
		count[s[i] - 'a']++;

	prev = 27;
	found = 0;
	for (j = 0; j <= 25; j ++)
		if (count[j] == (n + 1) / 2 + 1)
		{
			printf("%c", (char) j + 'a');
			prev = j;
			count[j] --;
			found = 1;
			break;
		}
	if (!found)
		for (j = 0; j <= 25; j ++)
			if (count[j] && j != prev)
			{
				printf("%c", (char) j + 'a');
				prev = j;
				count[j] --;
				break;
			}

	for (i = 1; i <= n; i ++)
	{
		found = 0;
		for (j = 0; j <= 25; j ++)
			if (count[j] == ((n + 1) - i) / 2 + 1 && j != prev)
			{
				printf("%c", (char) j + 'a');
				prev = j;
				count[j] --;
				found = 1;
				break;
			}
		if (!found)
			for (j = 0; j <= 25; j ++)
				if (count[j] && j != prev)
				{
					printf("%c", (char) j + 'a');
					prev = j;
					count[j] --;
					break;
				}
	}

	printf("\n");
	return 0;
}