Pagini recente » Cod sursa (job #1901539) | Cod sursa (job #283466) | Cod sursa (job #2875770) | Cod sursa (job #2442549) | Cod sursa (job #2225388)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int MAXBIT = 1 << 9;
vector<int> bucket[MAXBIT];
int num[10000005];
long long mask;
int index, n;
void rsort(int pow){
mask <<= 8;
for(int i = 1; i <= n; ++i){
int pos = num[i] & mask;
pos >>= pow;
bucket[pos].push_back(num[i]);
}
index = 1;
for(int i = 0; i <= 1 << 8; ++i){
for(int j = 0; j < int(bucket[i].size()); ++j)
num[index++] = bucket[i][j];
bucket[i].clear();
}
}
int main()
{
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int a, b, c;
fin >> n >> a >> b >> c;
num[1] = b;
for(int i = 2; i <= n; ++i)
num[i] = (a * num[i - 1] + b) % c;
mask = (1LL << 8) - 1;
for(int i = 1; i <= n; ++i){
int pos = num[i] & mask;
bucket[pos].push_back(num[i]);
}
index = 1;
for(int i = 0; i <= 1 << 8; ++i){
for(int j = 0; j < int(bucket[i].size()); ++j)
num[index++] = bucket[i][j];
bucket[i].clear();
}
rsort(8);
rsort(16);
rsort(32);
for(int i = 1; i <= n; ++i){
if(i % 10 == 1)
fout << num[i] << " ";
}
return 0;
}