Pagini recente » Cod sursa (job #841464) | Cod sursa (job #1033326) | Cod sursa (job #2933942) | Cod sursa (job #2336588) | Cod sursa (job #1167815)
#include<cstdio>
#include<vector>
using namespace std;
const int NMAX = 10000000+5;
const int DIGITS = 4;
const int BUCKET = (1<<8)-1;
void Read(),Solve(),Print();
int N,A,B,C;
int V[NMAX];
vector<int> Buckets[BUCKET+5];
int main()
{
Read();
Solve();
Print();
return 0;
}
void Read()
{
int i;
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d%d%d%d",&N,&A,&B,&C);
for(i = 1; i <= N; i++)
V[i] = (1LL * A * V[i-1] + B)%C;
}
void Solve()
{
int i,j,k,step;
vector<int>::iterator it;
for(step = 0; step < DIGITS; step++)
{
for(i = 1; i <= N; i++)
{
k = (V[i]>>(8*step))&BUCKET;
Buckets[k].push_back(V[i]);
}
for(i = 0, j = 0; i <= BUCKET; i++)
{
for(it = Buckets[i].begin(); it != Buckets[i].end(); it++)
V[++j] = *it;
Buckets[i].resize(0);
}
}
}
void Print()
{
int i;
for(i = 1; i <= N; i += 10)
printf("%d ",V[i]);
}