Pagini recente » Cod sursa (job #2741547) | Cod sursa (job #2717128) | Cod sursa (job #1725324) | Cod sursa (job #1596565) | Cod sursa (job #1802451)
#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[1] = B;
for(int i = 2; i <= N; ++i)
v[i] = (1LL * A * v[i-1] + B) % C;
}
vector<int> bucket[Lim];
void Radix_Sort(int k)
{
for(int i = 1; i <= N; ++i)
bucket[ ((v[i])>>k) & MASK ].push_back(v[i]);
int pz = 0;
for(int i = 0; i <= MASK; ++i) {
for(vector<int>::iterator it = bucket[i].begin(); it != bucket[i].end(); ++it)
v[++pz] = *it;
bucket[i].clear();
bucket[i].resize(0);
bucket[i].shrink_to_fit();
}
}
void Solve()
{
for(int i = 0; i <= 3; ++i)
Radix_Sort(8*i);
}
void Print()
{
for(int i = 1; i <= N; i += 10)
printf("%d ",v[i]);
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
Read();
Solve();
Print();
return 0;
}