Pagini recente » Cod sursa (job #2285017) | Cod sursa (job #2983718) | Cod sursa (job #1536793) | Cod sursa (job #285490) | Cod sursa (job #780142)
Cod sursa(job #780142)
#include <fstream>
#include <cstring>
#define MAX 1000005
#define NMAX 26
using namespace std;
char sir[MAX];
int v[NMAX], lgt, added, sw, f, s, val;
int getNext()
{
int index = 0;
for(int i = max(f + 1, s); i < NMAX; i++)
{
if(lgt - added && lgt - added - v[i] < v[i])
return -i;
if(!index && v[i]) index = i;
}
return index;
}
inline int abs(int a)
{
if(a > 0) return a;
return -a;
}
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 || (val = getNext()) < 0)
{
val = getNext();
s = abs(val);
out<<(char)('a' + s);
added++;
v[s]--;
}
while(v[f])
{
out<<(char)('a' + f); added++; v[f]--;
val = getNext(); s = abs(val);
if(s)
{
out<<(char)('a' + s);
v[s]--;
added++;
if((val = getNext()) < 0)
{
s = abs(val);
out<<(char)('a' + s);
added++;
v[s]--;
}
}
}
}
out.close();
return 0;
}