Cod sursa(job #110761)

Utilizator Omega91Nicodei Eduard Omega91 Data 27 noiembrie 2007 19:18:27
Problema Ordine Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
//#include <iostream>
#include <fstream>
using namespace std;
int main()
{
	fstream f("ordine.in", ios::in);
	int k = 0, i, j, min = 0;
	char c, vecbun[1000001] = {};
	unsigned int s[29] = {};
	c = f.get();
	while (c != '\n') {
		++s[c - 97];
		c = f.get();
	}
	f.close();

	for (j = 0; j < 28; ) {
		if (s[j]) {
			vecbun[k] = j + 97;
			--s[j];
			k += 2;
		}
		else {
			++j;
			for (i = min; ; ++i)
				if ( !vecbun[i] ) {
					min = i;
					k = i;
					break;
				}
		}
	}
	k = 0;
	for (i = min + 1; ; i += 2)
		if (vecbun[i]) ++k;
		else {
			c = vecbun[i - 2];
			break;
		}
	j = 0;
	vecbun[min] = 0;
	f.open("ordine.out", ios::out);
	//cout << vecbun << endl;
	if (k) {
		for (i = min - 1; i > 0; i -= 2)
			if (vecbun[i] != c) {
				j = i + 1;
				break;
			}
		if (j == 0) f << c << vecbun << endl;
		else {
			for (i = 0; i <= j - k; ++i) f << vecbun[i];
			j = j - k;
			for (i = 0; i < k; ++i)
				f << c << vecbun[++j];
			for (i = j + 1; i < min; ++i)
				f << vecbun[i];
			f << endl;
		}
	}
	else f << vecbun << 2 << endl;
	f.close();
	//cout << vecbun << endl;
	return 0;
}