Pagini recente » Cod sursa (job #2588267) | Cod sursa (job #303100) | Cod sursa (job #258023) | Cod sursa (job #164185) | Cod sursa (job #514779)
Cod sursa(job #514779)
#include <fstream>
#include <algorithm>
using namespace std;
#define nmax 1000001
char sir[nmax];
int anag[nmax],pozitie[nmax];
long n,q;
int lit[27];
int poz;
inline void citire()
{
ifstream in("ordine.in");
in>>sir; n=strlen(sir)-1;
}
inline void afisare()
{
ofstream out("ordine.out");
long i;
for(i=1;i<=n+1;i++)
{
if(pozitie[i])
out<<char(poz+'a'-1);
out<<char(anag[i]+'a'-1);
}
exit(0);
}
inline int solo()
{
int i,k=0;
for(i=1;i<=26;i++)
if(lit[i])
{
k++;
poz=i;
}
if(k==1)
return poz;
return 0;
}
void rez()
{
long i,j;
for(i=0;i<=n;i++)
lit[int(sir[i])-'a'+1]++;
for(i=1;i<=26;i++)
{
poz = solo();
if(poz)
{
n -= lit[poz]-1;
if(anag[q]!=poz)
{
anag[++q]=poz;
lit[poz]--;
}
for(j=q;j>0;j--)
if(anag[j]!=poz && anag[j-1]!=poz && lit[poz])
{
pozitie[j]=1;
lit[poz]--;
}
afisare();
}
else
while(lit[i])
{
if(i!=anag[q])
{
anag[++q]=i;
lit[i]--;
for(j=i+1;j<=26;j++)
if(lit[j])
{
anag[++q]=j;
lit[j]--;
break;
}
}
else
for(j=i+1;j<=26;j++)
if(lit[j])
{
anag[++q]=j;
lit[j]--;
break;
}
}
}
}
int main()
{
citire();
rez();
afisare();
return 0;
}