Pagini recente » Cod sursa (job #1674712) | Cod sursa (job #112747) | Cod sursa (job #2843808) | Cod sursa (job #2355670) | Cod sursa (job #686726)
Cod sursa(job #686726)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
#define maxN 1000005
char s[maxN];
int cont[30];
int main()
{
ifstream f ("ordine.in");
ofstream g ("ordine.out");
f.getline (s, maxN);
int leng = strlen (s);
for (int i = 0; i < leng; ++ i) cont[s[i] - 'a'] ++;
char last = '0';
for (int i = 1; i <= leng; i ++)
{
int max1 = 0;
char m1, m2 ;
bool ok = false;
for (char j = 'a'; j <= 'z'; ++ j)
{
if (cont[j - 'a'] > max1)
{
max1 = cont[j - 'a'];
m1 = j;
}
if (! ok && cont[j - 'a'] && j != last)
{
m2 = j;
ok = true;
}
}
int S = leng - i;
if (S - max1 >= max1 - 1)
{
if (last == m1)
{
g << m2;
-- cont[m2 - 'a'];
last = m2;
continue;
}
if (m1 < m2)
{
g << m1;
-- cont[m1 - 'a'];
last = m1;
}
else
{
g << m2;
-- cont[m2 - 'a'];
last = m2;
}
continue;
}
g << m1;
-- cont[m1 - 'a'];
last = m1;
}
return 0;
}