Cod sursa(job #2393181)

Utilizator noperestayadelin mihoc noperestay Data 30 martie 2019 22:57:02
Problema Ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <cstring>
#include <algorithm>
#include <fstream>

using namespace std;

ifstream fin("ordine.in");
ofstream fout("ordine.out");

char sir[256], sirAnagrama[256], aux[2];
int aparitii[28], precedent;

int nextChar(int i) {
	for (int j = i + 1; j <= 25; j++)
		if (aparitii[j])
			return j;
	return -1;
}

void anagrama() {
	for (int i = 0; i <= 25; i++)
		if (nextChar(i) != -1)
			while (aparitii[i] && nextChar(i) != -1) {
				aux[0] = char(i + 'a');
				aux[1] = NULL;
				strcat(sirAnagrama, aux);
				aux[0] = char(nextChar(i) + 'a');
				aux[1] = NULL;
				strcat(sirAnagrama, aux);
				aparitii[i]--;
				aparitii[nextChar(i)]--;
				if (!aparitii[i] && nextChar(nextChar(i)) != -1) {
					aux[0] = char(nextChar(nextChar(i)) + 'a');
					aux[1] = NULL;
					strcat(sirAnagrama, aux);
					aparitii[nextChar(nextChar(i))]--;
				}
			}
		else
			if (aparitii[i]) {
				aux[0] = char(i + 'a');
				aux[1] = NULL;
				strcat(sirAnagrama, aux);
			}

	fout << sirAnagrama;
}

int main() {

	fin >> sir;
	for (int i = 0; i <= strlen(sir); i++)
		aparitii[sir[i] - 'a']++;

	anagrama();

	return 0;
}