Pagini recente » Cod sursa (job #433186) | Cod sursa (job #3152475) | Cod sursa (job #1542088) | Cod sursa (job #2825103) | Cod sursa (job #2671077)
#include <bits/stdc++.h>
using namespace std;
const int max_n = (int)1e7 + 5;
const int mask = (int)(1 << 8) - 1;
const int bytes = 8;
const int times = 4;
int n;
int a, b, c;
int v[max_n];
int counter[mask + mask], tmp[max_n];
int main() {
ifstream in("radixsort.in");
ofstream out("radixsort.out");
in >> n >> a >> b >> c;
v[1] = b;
for (int i = 2; i <= n; ++i) {
v[i] = (1LL * a * v[i - 1] + b) % c;
}
for (int t = 0; t < times; ++t) {
for (int i = 1; i <= n; ++i) {
counter[((v[i] << (t * bytes)) & mask)] += 1;
}
for (int i = 1; i <= mask; ++i) {
counter[i] += counter[i - 1];
}
for (int i = 1; i <= n; ++i) {
tmp[counter[((v[i] << (t * bytes)) & mask)]] = v[i];
counter[((v[i] << (t * bytes)) & mask)] -= 1;
}
for (int i = 1; i <= n; ++i) {
v[i] = tmp[i];
}
memset(counter, 0, sizeof(counter));
}
reverse(v + 1, v + n + 1);
for (int i = 1; i <= n; i += 10) {
out << v[i] << " ";
}
return 0;
}