Pagini recente » Cod sursa (job #2734797) | Cod sursa (job #136102) | Cod sursa (job #2934236) | Cod sursa (job #3167172) | Cod sursa (job #516787)
Cod sursa(job #516787)
#include <fstream>
using namespace std;
#define nmax 1000003
long lit[28],n,q;
int sol[nmax];
bool poz[nmax];
ofstream out("ordine.out");
inline void citire()
{
char sir[nmax];
ifstream in("ordine.in"); in>>sir; n=strlen(sir);
for(long i=0;i<n;i++)
lit[int(sir[i])-'a'+1]++;
}
void solve()
{
int i,j;
bool ok;
for(i=1;i<=27;i++)
{
while(lit[i])
{
if(i != sol[q])
{ sol[++q]=i; n--; ok = true; lit[i]--; }
else
{
ok = false;
for(j=1;j<=27;j++)
if(lit[j] && sol[q]!=j)
{
ok = true; n--; lit[j]--;
sol[++q]=j;
break;
}
}
if(!ok)
break;
}
}
int last;
if(n)
{
for(i=1;i<=27;i++)
if(lit[i])
{
last=i;
break;
}
for(i=q;i>=0;i--)
if(sol[i]!=last && sol[i+1]!=last)
{
poz[i]=1;
n--;
if(n==0)
break;
}
}
//out<<n<<" "<<endl;
if(poz[0])
out<<char(last+'a'-1);
for(i=1;i<=q;i++)
{
out<<char(sol[i]+'a'-1);
if(poz[i])
out<<char(last+'a'-1);
}
}
int main()
{
citire();
solve();
return 0;
}