Pagini recente » Cod sursa (job #3141271) | Cod sursa (job #2515794) | Cod sursa (job #2779500) | Cod sursa (job #2781104) | Cod sursa (job #197417)
Cod sursa(job #197417)
#include<fstream.h>
#include<string.h>
#define dim 1000001
ifstream f("ordine.in");
ofstream g("ordine.out");
char s[dim];
int v[30],n,nn,st[dim];
int main()
{
int i,l,j,sf,ok,cul;
f.get(s,dim,'\n');
f.close();
n=strlen(s);
nn=n;
cul=0;
for(i=0;i<n;i++)
{if(!v[s[i]-'a'+1]) cul++;
v[s[i]-'a'+1]++;
}
sf=0;
while(n)
{
for(j=1;j<=30;j++)
if(v[j])
{
if(st[sf]!=j)
{
sf++;
st[sf]=j;
v[j]--;
if(!v[j]) cul--;
n--;
break;
}
else if(cul==1)
{ok=0;
for(i=sf;i>1;i--)
if( (st[i]!=j)&&(st[i-1]!=j) )
{
sf++;
for(l=sf;l>i;l--)
st[l]=st[l-1];
st[i]=j;
v[j]--;
ok=1;
n--;
break;
}
if(ok) break;
}
}
}
for(i=1;i<=nn;i++)
g<<(char)(st[i]+'a'-1);
g<<'\n';
return 0;
}
/*void solutie()
{
int i;
for(i=1;i<=n;i++)
g<<(char)(st[i]+'a'-1);
g<<'\n';
g.close();
}
int ok(int k)
{
if(st[k]==st[k-1]) return 0;
return 1;
}
int back(int k)
{
int i;
if(k==n+1) {solutie(); return 0;}
else
{for(i=1;i<=30;i++)
if(v[i])
{
st[k]=i;
if(ok(k)) {
v[i]--;
back(k+1);
v[i]++;
}
}
}
return 0;
} */