Pagini recente » Cod sursa (job #1078313) | Cod sursa (job #826796) | Cod sursa (job #522202) | Cod sursa (job #527251) | Cod sursa (job #780108)
Cod sursa(job #780108)
#include <fstream>
#include <cstring>
#define MAX 1000005
#define NMAX 26
using namespace std;
char sir[MAX];
int v[NMAX], lgt, added, sw, f, s;
int getNext()
{
int index = 0;
for(int i = max(f + 1, s); i < NMAX; i++)
{
if(lgt - added && lgt - added - v[i] < v[i])
{
s = i;
return 1;
}
if(!index && v[i]) index = i;
}
s = index;
return 0;
}
int main()
{
ifstream in("ordine.in");
in.getline(sir, MAX);
in.close();
lgt = strlen(sir);
for(int i = 0; i < lgt; i++) v[sir[i] - 'a']++;
ofstream out("ordine.out");
for(f = 0, s = 1; f < NMAX; f++)
{
if(!v[f]) continue;
if(f == s || (getNext()))
{
getNext();
out<<(char)('a' + s);
added++;
v[s]--;
}
while(v[f])
{
out<<(char)('a' + f); added++; v[f]--;
getNext();
if(s)
{
out<<(char)('a' + s);
v[s]--;
added++;
}
}
}
out.close();
return 0;
}