Pagini recente » Cod sursa (job #3248475) | Simulare 32 | Cod sursa (job #2373672) | Cod sursa (job #2200283) | Cod sursa (job #533256)
Cod sursa(job #533256)
// http://infoarena.ro/problema/ordine
#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;
break;
}
out << following;
letter[following]--;
previous = following;
}
return 0;
}