Pagini recente » Cod sursa (job #1785491) | Cod sursa (job #2055790) | Cod sursa (job #2408851) | Cod sursa (job #3157024) | Cod sursa (job #1364934)
#include <cstdio>
#include <vector>
#define MASK 255 /// 8 biti
#define Lim 256
using namespace std;
vector<int> v;
int N,A,B,C;
void Read()
{
scanf("%d%d%d%d",&N,&A,&B,&C);
v.resize(N+1);
v[0] = B;
for(int i = 1; i <= N; ++i)
v[i] = ( (1LL * A * v[i-1]) % C + B) % C;
}
void Radix_Sort(int k)
{
vector<int> bucket[Lim];
for(vector<int>::iterator it = v.begin(); it != v.end(); ++it)
bucket[ ((*it)>>k) & MASK ].push_back(*it);
int pz = 0;
for(int i = 0; i <= 255; ++i)
for(vector<int>::iterator it = bucket[i].begin(); it != bucket[i].end(); ++it)
v[pz++] = *it;
}
void Solve()
{
for(int i = 0; i <= 24; i+=8)
Radix_Sort(i);
}
void Print()
{
for(int i = 0; i*10 + 1 <= N; ++i)
printf("%d ",v[i*10 + 1]);
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
Read();
Solve();
Print();
return 0;
}