Pagini recente » Cod sursa (job #846747) | Cod sursa (job #2384167) | Cod sursa (job #43349) | Cod sursa (job #1642352) | Cod sursa (job #1145921)
#include <cstdio>
#include <vector>
#define mask 255
using namespace std;
int v[10000005],N;
int A,B,C;
vector<int> bucket[mask+2];
void sparge(int k)
{
int _key;
for(int i = 1; i <= N; ++i)
{
_key = ((v[i]>>(8*k))&mask);
bucket[_key].push_back(v[i]);
}
}
void comprima()
{
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();
}
}
void solve()
{
for(int i = 0; i <= 3; ++i)
{
sparge(i);
comprima();
}
}
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);
scanf("%d%d%d%d",&N,&A,&B,&C);
v[1] = B;
for(int i = 2; i <= N; ++i)
v[i] = (A * v[i-1] + B) % C;
solve();
print();
return 0;
}