Cod sursa(job #968657)

Utilizator antonioteoZait Teodor Antonio antonioteo Data 2 iulie 2013 14:58:46
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>
#include <cstring>
using namespace std;

#define SMAX 1000001
#define FMAX 27

int i, n, N, j;
int F[FMAX];
char s[SMAX];
int Cnt, Pair;
char last, a, b;

int main() {
	freopen("ordine.in","r",stdin);
	freopen("ordine.out","w",stdout);
	scanf("%s", s + 1);
	N = strlen(s + 1);
	for (i = 1; i <= N; ++i) 
		++F[s[i] - 'a'];
	for (i = 1; i <= N; ++i) {
		for (j = 0; j <= 26; ++j)
			if (F[j] == (N - i + 1) / 2 + 1 && j + 'a' != last)
				break;
		if (j < 26 && F[j] == (N - i + 1) / 2 + 1) {
			--F[j];
			printf("%c", j + 'a');
			last = j + 'a';
		}
		else {
			for (j = 0; j <= 26; ++j) 
				if (F[j] && j + 'a' != last)
					break;
			if (j < 26 && F[j]) {
				--F[j];
				printf("%c", j + 'a');
				last = j + 'a';
			}
		}
	}
	return 0;
}