Cod sursa(job #686726)

Utilizator Catah15Catalin Haidau Catah15 Data 21 februarie 2012 19:58:36
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string>

using namespace std;

#define maxN 1000005

char s[maxN];
int cont[30];

int main()
{
	ifstream f ("ordine.in");
	ofstream g ("ordine.out");
	
	f.getline (s, maxN);
	
	int leng = strlen (s);
	
	for (int i = 0; i < leng; ++ i) cont[s[i] - 'a'] ++;
	
	char last = '0';
	
	for (int i = 1; i <= leng; i ++)
	{
		int max1 = 0;
		char m1, m2 ;
		bool ok = false;
		
		for (char j = 'a'; j <= 'z'; ++ j)
		{
			if (cont[j - 'a'] > max1)
			{
				max1 = cont[j - 'a'];
				m1 = j;
			}
			
			if (! ok && cont[j - 'a'] && j != last)
			{
				m2 = j;
				ok = true;
			}
		}
		
		int S = leng - i;
		
		if (S - max1 >= max1 - 1)
		{
			if (last == m1)
			{
				g << m2;
				-- cont[m2 - 'a'];
				last = m2;
				continue;
			}
			
			if (m1 < m2)
			{
				g << m1;
				-- cont[m1 - 'a'];
				last = m1;
			}
			else
			{
				g << m2;
				-- cont[m2 - 'a'];
				last = m2;
			}
			
			continue;
		}
		
		g << m1;
		-- cont[m1 - 'a'];
		last = m1;
	}
	
	return 0;
}