Pagini recente » Cod sursa (job #817658) | Cod sursa (job #2031533) | Cod sursa (job #54133) | Cod sursa (job #2182683) | Cod sursa (job #1087467)
#include <cstdio>
using namespace std;
const int MAXSIR = 1000010;
const int MAXALFABET = 'z' - 'a' + 10;
int vf[MAXALFABET];
int max = -1,min = MAXALFABET;
int l_sir = 0;
void citire()
{
char sir[MAXSIR] = {0};
freopen("ordine.in","r",stdin);
freopen("ordine.out","w",stdout);
gets(sir + 1);
for (int i = 1;sir[i] != 0;++i)
{
++l_sir;
++vf[sir[i] - 'a' + 1];
if (sir[i] - 'a' + 1 > max)
max = sir[i] - 'a' + 1;
if (sir[i] - 'a' + 1 < min)
min = sir[i] - 'a' + 1;
}
}
void prelucrare()
{
char sir[MAXSIR] = {0};
int l_sir_2 = 0;
int poz_afisat = -1;
bool gasit;
for (int i = 1;i <= l_sir;++i)
{
gasit = false;
for (int j = min;j <= max;++j)
if (vf[j] == (l_sir - i + 1) / 2 + 1 && j != poz_afisat)
{
poz_afisat = j;
sir[++l_sir_2] = 'a' + j - 1;
--vf[j];
while (vf[min] == 0)
++min;
gasit = true;
break;
}
if (!gasit)
{
for (int j = min;j <= max;++j)
if (vf[j] > 0 && j != poz_afisat)
{
poz_afisat = j;
sir[++l_sir_2] = 'a' + j - 1;
--vf[j];
while (vf[min] == 0)
++min;
break;
}
}
}
puts(sir + 1);
}
int main()
{
citire();
prelucrare();
return 0;
}