Pagini recente » Cod sursa (job #1382807) | Cod sursa (job #3290240) | Cod sursa (job #152712) | Cod sursa (job #1229084) | Cod sursa (job #1313345)
#include <cstdio>
using namespace std;
int i,j,m,n,a[10000000],b[10000000],k=1,o[12],l,N,A,B,C,Max,l1,z,Z;
bool ok[10];
struct nod
{
int inf;
nod *leg;
};
nod *p[10],*q,*prim,*u[10];
void push(int k,int x)
{
nod *q;
if(!ok[k])
{
p[k]=new nod;
p[k]->inf=x;
p[k]->leg=NULL;
u[k]=p[k];
ok[k]=true;
}
else
{
q=new nod;
q->inf=x;
q->leg=NULL;
u[k]->leg=q;
u[k]=q;
}
}
void cauta(int i)
{
nod *q;
q=p[i];
while(q->leg!=NULL)
{
a[++l]=q->inf;
q=q->leg;
}
a[++l]=q->inf;
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d %d %d %d",&N,&A,&B,&C);
a[1]=B;
for(i=2; i<=N; i++)
{
a[i] = (A * a[i-1] + B) % C;
if(a[i]>Max)Max=a[i];
}Z=N;
while(Max>k)
{
k*=10;
for(i=1; i<=N; i++)
{
if(a[i]>=k/10)
push((a[i]/(k/10))%10,a[i]);
else if(a[i]>=0){b[++l1]=a[i];a[i]=-1;z++;}
}
for(i=0; i<10; i++)
{
if(ok[i])
{
cauta(i);
}
}
l=0;N-=z;z=0;
for(i=0; i<10; i++)
ok[i]=false;
}
for(i=1; i<=Z; i++)
if(a[i]>=0) b[++l1]=a[i];
for(i=1; i<=Z; i+=10)
printf("%d ",b[i]);
printf("\n");
return 0;
}