Pagini recente » Cod sursa (job #1451176) | Cod sursa (job #1088876) | Cod sursa (job #987039) | Cod sursa (job #2498764) | Cod sursa (job #2850069)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("ordine.in");
ofstream fout ("ordine.out");
int fr[30], n, i, j, ok;
char v[1000001], ch;
int main()
{
while (fin>>ch)
{
fr[ch-'a']++;
n++;
}
/// formez anagrama
v[0]='+';
for (i=1; i<=n; i++)
{
/// determin litera pentru care numarul de aparitii
/// este mai mare decat numarul de pozitii ce trebuie
/// completate/2 : (n-i+1)/2
ok=0;
for (j=0; j<='z'-'a'; j++)
{
if (fr[j]>(n-i+1)/2 && j+'a'!=v[i-1])
{
ch=j+'a';
ok=1;
break;
}
}
if(ok==1){
v[i]=ch;
fr[ch-'a']--;
}
else /// trebuie sa pun cel mai maic caracter !=v[i-1]
for (j=0; j<='z'-'a'; j++)
{
if (fr[j]!=0 && j+'a'!=v[i-1])
{
v[i]=j+'a';
fr[j]--;
break;
}
}
}
for (i=1; i<=n; i++)
fout<<v[i];
return 0;
}