Pagini recente » Cod sursa (job #725370) | Cod sursa (job #2233118) | Cod sursa (job #1621009) | Cod sursa (job #427750) | Cod sursa (job #1248453)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("radixsort.in","r");
FILE *g=fopen("radixsort.out","w");
int n,a,b,c,v[10000001],put=1,maxim,nr;
bool ok;
struct nod{int val;
nod *st,*dr;
nod() {val=0;
st=NULL;
dr=NULL;}
};
nod *p[10],*u[10];
inline void creeaza(int k)
{int j;
j=(k/put)%10;
if (p[j]==NULL) {p[j]=new nod;
p[j]->val=k;
p[j]->st=NULL;
p[j]->dr=NULL;
u[j]=p[j];
}
else {nod *t=new nod;
t->val=k;
t->st=u[j];
t->dr=NULL;
u[j]->dr=t;
u[j]=t;
}
}
inline void sterge(int i)
{nod *k;
while (u[i]!=NULL)
{k=u[i];
u[i]=u[i]->st;
delete(k);
}
}
int main()
{int i,j;
long long ll;
fscanf(f,"%d %d %d %d",&n,&a,&b,&c);
v[1]=b;
for (i=2;i<=n;i++) {ll=1LL*(1LL*a*(v[i-1])+b)%c;
v[i]=ll;
maxim=max(maxim,v[i]);}
while (1LL*put<=maxim)
{for (i=1;i<=n;i++) {creeaza(v[i]);}
nr=0;
for (i=0;i<=9;i++) {nod *t=p[i];
while (t!=NULL) {v[++nr]=t->val;
t=t->dr;}
}
for (i=0;i<=9;i++) {sterge(i);
p[i]=NULL;}
put=put*10;}
for (i=1;i<=n;i+=10) fprintf(g,"%d ",v[i]);
return 0;
}