Pagini recente » Istoria paginii runda/ziua_recursivitatii/clasament | Cod sursa (job #1993645) | Cod sursa (job #455556) | Cod sursa (job #201063) | Cod sursa (job #2247674)
#include <bits/stdc++.h>
using namespace std;
const int kBuckets = 256;
void sort_by_bucket(function<int (int)> bucket_of_int, const vector<int>& from, vector<int>& to) {
vector<int> bucket_count(kBuckets, 0);
for (int n : from)
bucket_count[bucket_of_int(n)]++;
for (int i = 0, total = 0; i < kBuckets; i++) {
int self = bucket_count[i];
bucket_count[i] = total;
total += self;
}
for (size_t i = 0; i < from.size(); i++) {
to[bucket_count[bucket_of_int(from[i])]++] = from[i];
}
}
int main() {
#ifdef INFOARENA
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
#endif
int n, a, b, c;
cin >> n >> a >> b >> c;
vector<int> v, w;
v.resize(n);
w.resize(n);
v[0] = b % c;
for (int i = 1; i < n; i++) {
v[i] = (1LL * a * v[i - 1] % c + b) % c;
}
for (int offset = 0; offset < 32; offset += 8) {
sort_by_bucket([offset](int x) { return (x >> offset) & 0xFF; }, v, w);
v.swap(w);
}
for (int i = 0; i < n; i += 10) {
cout << v[i] << ' ';
}
cout << '\n';
return 0;
}