Pagini recente » Cod sursa (job #2763118) | Cod sursa (job #90527) | Cod sursa (job #759362) | Cod sursa (job #3141208) | Cod sursa (job #1105210)
#include<cstdio>
using namespace std;
const int NMAX = 10000005;
const int MASK = (1<<8)-1;
int N,A,B,C,V[NMAX][2],i,j,k,c,n,shift,Buckets[MASK+5];
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d%d%d%d",&N,&A,&B,&C);
for(V[1][0]=B,i=2;i<=N;i++) V[i][0]=(1LL*A*V[i-1][0]+B)%C;
for(n=1,i=0,shift=0;i<4;i++,shift+=8)
{
for(j=1;j<=N;j++)
{
k=(V[j][c]>>shift)&MASK;
Buckets[k]++;
}
for(j=1;j<=MASK;j++)
Buckets[j]+=Buckets[j-1];
for(j=N;j;j--)
{
k=(V[j][c]>>shift)&MASK;
V[Buckets[k]][n]=V[j][c];
Buckets[k]--;
}
c=1-c;n=1-n;
for(j=0;j<=MASK;j++) Buckets[j]=0;
}
for(i=1;i<=N;i+=10) printf("%d ",V[i][c]);
return 0;
}