Pagini recente » Cod sursa (job #1543240) | Cod sursa (job #1968537) | Cod sursa (job #932246) | Cod sursa (job #1793477) | Cod sursa (job #613628)
Cod sursa(job #613628)
#include <fstream.h>
#include <string.h>
int v[30], i, j = 0, n, last, broken = 0;
char sir[1000100];
void Citire ()
{
ifstream fin ("ordine.in");
fin >> sir;
fin.close ();
}
void Indexare ()
{
n = strlen (sir);
memset (v, 0, sizeof (v));
for (i = 0; i < n; i++)
{
v[(int) (sir[i] - 97)] += 1;
}
}
void Grunts_Work ()
{
ofstream fout ("ordine.out");
for (i = 0; i < 26; i++)
{
if ((v[i] << 1) - 1 >= n)
{
fout << (char) (i + 97);
v[i]--;
last = i;
broken = 1;
break;
}
}
if (!broken)
{
for (i = 0; i < 26; i++)
{
if (v[i] > 0)
{
fout << (char) (i + 97);
v[i]--;
last = i;
break;
}
}
}
n--;
while (n)
{
broken = 0;
for (i = 0; i < 26; i++)
{
if ((v[i] << 1) - 1 >= n)
{
fout << (char) (i + 97);
v[i]--;
last = i;
broken = 1;
break;
}
}
if (!broken)
{
for (i = 0; i < 26; i++)
{
if (last != i && v[i] > 0)
{
fout << (char) (i + 97);
v[i]--;
last = i;
break;
}
}
}
n--;
}
fout.close ();
}
int main ()
{
Citire ();
Indexare ();
Grunts_Work ();
return 0;
}