Cod sursa(job #110034)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 25 noiembrie 2007 16:24:01
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#include <math.h>
#include <string.h>

long i, u, sum, max, poz, v[32], aux;
char s[1000010], z;

int main() {
	freopen("ordine.in", "r", stdin);
	freopen("ordine.out", "w", stdout);
	scanf("%s", s);
	u = strlen(s);
	z = '@';
	for (i = 0;i < u; ++i) {
		++v[(long)(s[i]) - 96];
		++sum;
	}
	while (sum > 0) {
		--sum;
		max = 0;
		for (i = 1;i <= 26; ++i) {
			if (max < v[i]) {
				max = v[i];
				poz = i;
			}
		}
		if (max * 2 > sum + 1) {
			--v[poz];
			z = (char)(poz + 96);
			printf("%c", z);
		} else {
			aux = 97;
			while (z == (char)(aux) || v[aux - 96] == 0) {
				++aux;
			}
			z = (char)(aux);
			--v[aux - 96];
			printf("%c", z);
		}
	}
	return 0;
}