Pagini recente » Istoria paginii runda/concurs_11_12_02_27 | Cod sursa (job #2493640) | Cod sursa (job #131544) | Arhiva de probleme | Cod sursa (job #2247676)
#include <bits/stdc++.h>
using namespace std;
const int kBuckets = 256;
void sort_by_bucket(int offset, const vector<int>& from, vector<int>& to) {
vector<int> bucket_count(kBuckets, 0);
for (int n : from)
bucket_count[(n >> offset) & 0xFF]++;
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[(from[i] >> offset) & 0xFF]++] = 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, v, w);
v.swap(w);
}
for (int i = 0; i < n; i += 10) {
cout << v[i] << ' ';
}
cout << '\n';
return 0;
}