Cod sursa(job #968540)

Utilizator antonioteoZait Teodor Antonio antonioteo Data 2 iulie 2013 11:43:44
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>
#include <cstring>
using namespace std;

#define SMAX 1000001
#define ALF 27

int i, N, n;
int F[ALF], v[ALF];
char s[SMAX];
int st, dr, pas;
char a, b, last;
int turn = 1; 

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 = 0; i <= 26; ++i) 
		if (F[i]) 
			v[++n] = i;
	st = v[1];
	for (i = 2; i <= n; ++i) {
		dr = v[i];
		while (F[st] && F[dr]) {
			a = st + 'a';
			b = dr + 'a';
			if (a == last) 
				printf("%c%c", b, a),
				last = a;
			else 
				printf("%c%c", a, b),
				last = b;
			--F[st], --F[dr];
		}
		if (F[dr])
			st = dr;
	}
	if (F[st]) {
		a = st + 'a';
		if (a != last) 
			printf("%c\n", a);
	}
	return 0;
}