Cod sursa(job #1834039)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 23 decembrie 2016 18:56:34
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("ordine.in");
ofstream g("ordine.out");

string str;
int frec[256] = {};
list<char> ls;

bool do_able(){
	const int sum = accumulate(frec+'a', frec+'z'+1, 0),
		big = *max_element(frec+'a', frec+'z'+1),
		left = sum - big;
	return left >= big-1; }

bool append(){
	for(char ch = 'a'; ch <= 'z'; ++ch){
		if(!ls.empty() && ls.back() == ch) continue;
		if(frec[ch] == 0) continue;
		--frec[ch];
		if(do_able()){
			ls.push_back(ch);
			return true; }
		else ++frec[ch]; }
	return false; }

int main(){
	f >> str;
	for(const auto x : str) ++frec[x];

	while(append());

	for(const auto x : ls) g << x;
	return 0; }