Pagini recente » Cod sursa (job #2425491) | Cod sursa (job #2758849) | Cod sursa (job #1021314) | Cod sursa (job #2693120) | Cod sursa (job #828824)
Cod sursa(job #828824)
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
int k,nrc,val,i,j,n,aux,xi,maxi,cif[20],ulc[20];
struct nod
{
int nr;
nod *urm[10];
nod()
{
nr=0;
memset(urm,0,sizeof(urm));
}
};
nod *t,*p,*q[20];
vector < int > v[15];
////v[i] reprezinta sirul numerelor de i cifre ordonate crescator
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
t=new nod;
for(i=1;i<=n;i++)
{
scanf("%d",&xi);
if(xi==0) printf("0 ");
else
{
nrc=0;
aux=xi;
while(aux>0)
{
nrc++;
cif[nrc]=aux%10;
aux=aux/10;
}
p=t;
if(nrc>maxi) maxi=nrc;
for(j=nrc;j>=1;j--)
{
if(p->urm[cif[j]]==0) p->urm[cif[j]]=new nod;
p=p->urm[cif[j]];
}
p->nr++;
}
}
/////care au i1 cifre le caut in trie
//////////////////fac un BACK
q[0]=t;
val=0;
k=1;
ulc[1]=-1;
while(k>0)
{
while(k<=maxi&&ulc[k]<9)
{
ulc[k]++;
if(ulc[k]==0) val=val*10;
else val++;
if(q[k-1]->urm[ulc[k]]!=0)
{
q[k]=q[k-1]->urm[ulc[k]];
if(val==-150)
val=val;
for(i=1;i<=q[k]->nr;i++)
v[k].push_back(val);
k++;
ulc[k]=-1;
}
}
if(ulc[k]!=-1) val=val/10;
k--;
if(k==1)
k=k;
}
for(i=1;i<=maxi;i++)
for(j=0;j<v[i].size();j++)
printf("%d ",v[i][j]);
return 0;
}