Pagini recente » Cod sursa (job #2852074) | Cod sursa (job #2707836) | Cod sursa (job #880314) | Cod sursa (job #1715567) | Cod sursa (job #945832)
Cod sursa(job #945832)
#include <fstream>
using namespace std;
ifstream fin("ordine.in");
ofstream fout("ordine.out");
char s;
int v[27];
int a[1000002][2], j;
int main()
{
while (fin.get(s))
if (s >= 'a' && s <= 'z')
++v[s - 'a' + 1];
bool ok = true;
j = 0;
for (int i = 1; i <= 26; ++i)
{
int ii;
for (ii = i + 1; ii <= 26; ++ii)
if (v[ii] != 0)
break;
if (ii == 27)
ok = false;
if (ok == false)
{
int jj;
if (a[j][0] != i)
{
a[++j][0] = i;
--v[i];
}
jj = j;
while (v[i] != 0)
{
while (a[jj][0] == i || a[jj - 1][0] == i)
--jj;
a[jj][1] = i;
--v[i];
}
break;
}
else
{
while (v[i] != 0 && v[ii] != 0)
{
if (a[j][0] != i)
{
if (i < ii)
{
a[++j][0] = i;
a[++j][0] = ii;
}
else
{
a[++j][0] = ii;
a[++j][0] = i;
}
--v[i];
--v[ii];
}
else
{
a[++j][0] = ii;
a[++j][0] = i;
--v[i];
--v[ii];
}
}
if (v[i] == 0)
i = ii - 1;
else
--i;
}
}
for (int i = 1; i <= j; ++i)
{
if (a[i][1] != 0)
fout << char(a[i][1] + 'a' - 1);
fout << char(a[i][0] + 'a' - 1);
}
fin.close();
fout.close();
}