Pagini recente » Cod sursa (job #1989279) | Cod sursa (job #2272654) | Cod sursa (job #797520) | Cod sursa (job #1060123) | Cod sursa (job #533254)
Cod sursa(job #533254)
#include <fstream>
#include <string>
using namespace std;
ifstream in("ordine.in");
ofstream out("ordine.out");
string word;
int letter[200];
int i,lenght;
char currentLetter,previous,following;
int main() {
in >> word;
lenght = word.size() - 1;
// retinem numarul de aparitii al fiecarei
// litera in cadrul sirului
for (i=0;i<=lenght;i++)
letter[word[i]]++;
previous = ' ';
// parcurgem fiecare litera a sirului
for (i=0;i<=lenght;i++) {
// presupunem ca litera care urmeaza este z
// (cea mai mare din punct de vedere lexicografic
following = 'z';
// parcurgem fiecare litera a alfabetului
for (currentLetter='a';currentLetter<='z';currentLetter++)
// daca o litera are numarul de aparitii (lenght-i+1)/2+1
// ea trebuie neaparat sa fie pe urmatoarea pozitie
// (in caz contrar sirul nu poate fi construit, fiind
// nevoiti sa o asezam pe pozitii consecutive)
if (letter[currentLetter] == (lenght-i+1)/2+1) {
following = currentLetter;
break;
}
else
if (letter[currentLetter] && currentLetter != previous && currentLetter < following)
following = currentLetter;
out << following;
letter[following]--;
previous = following;
}
return 0;
}