Pagini recente » Cod sursa (job #1642378) | Cod sursa (job #3164000) | Cod sursa (job #494352) | Cod sursa (job #485659) | Cod sursa (job #2618339)
#include <iostream>
#include <fstream>
#include <vector>
const int MAX_BUCKET = (1<<8) + 1;
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
vector<int>bucket[MAX_BUCKET];
int n,a,b,c;
int main()
{
in>>n>>a>>b>>c;
vector<int>v(n + 1);
v[1] = b;
for(int i = 2; i <= n; i++){
v[i] = (1ll * a * v[i - 1] + b) % c;
}
for(int i = 1; i <= n; i++){
int u8 = v[i] & ((1<<8) - 1);
bucket[u8].emplace_back(v[i]);
}
int index = 0;
for(int i = 0; i <= (1<<8); i++){
for(int j = 0; j < bucket[i].size(); j++){
int nr = bucket[i][j];
v[++index] = nr;
}
bucket[i].clear();
}
for(int i = 1; i <= n; i++){
int primii16 = (1<<8) - 1;
int p16 = (v[i] & (primii16<<8));
if(p16 > 0)
p16 >>= 8;
bucket[p16].emplace_back(v[i]);
}
index = 0;
for(int i = 0; i <= (1<<8); i++){
for(int j = 0; j < bucket[i].size(); j++){
int nr = bucket[i][j];
v[++index] = nr;
}
bucket[i].clear();
}
for(int i = 1; i <= n; i++){
int primii16 = (1<<8) - 1;
int p16 = (v[i] & (primii16<<16));
if(p16 > 0)
p16 >>= 16;
bucket[p16].emplace_back(v[i]);
}
index = 0;
for(int i = 0; i <= (1<<8); i++){
for(int j = 0; j < bucket[i].size(); j++){
int nr = bucket[i][j];
v[++index] = nr;
}
bucket[i].clear();
}
for(int i = 1; i <= n; i++){
int primii16 = (1<<8) - 1;
int p16 = (v[i] & (primii16<<24));
if(p16 > 0)
p16 >>= 24;
bucket[p16].emplace_back(v[i]);
}
index = 0;
for(int i = 0; i <= (1<<8); i++){
for(int j = 0; j < bucket[i].size(); j++){
int nr = bucket[i][j];
v[++index] = nr;
}
}
for(int i = 1; i <= n; i += 10)
out<<v[i]<<" ";
return 0;
}