Pagini recente » Cod sursa (job #2772137) | Cod sursa (job #2716987) | Cod sursa (job #3156201) | Cod sursa (job #1415539) | Cod sursa (job #1183441)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
void radixsortaux(vector<int> & a, vector<int> & b, int nbitshift)
{
const int log_nbuck = 16;
const int nbuck = 1<<log_nbuck;
int n = a.size();
vector<int> cnt(nbuck+1);
for (int i = 0; i < n; i++) {
int tmp = (a[i] >> nbitshift) & (nbuck-1);
cnt[tmp+1]++;
}
for (int i = 1; i < nbuck; i++) {
cnt[i] += cnt[i-1];
}
for (int i = 0; i < n; i++) {
int tmp = (a[i] >> nbitshift) & (nbuck-1);
b[cnt[tmp]] = a[i];
cnt[tmp]++;
}
}
void radixsort(vector<int> & a)
{
vector<int> b(a.size());
radixsortaux(a, b, 0);
radixsortaux(b, a, 16);
}
int main()
{
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
int n;
cin >> n;
int x, y, z;
cin >> x >> y >> z;
vector<int> a(n);
a[0] = y;
for (int i = 1; i < n; i++) {
a[i] = (x*a[i-1]+y)%z;
}
radixsort(a);
// sort(a.begin(), a.end());
for (int i = 0; i < n; i += 10) {
printf("%d%s", a[i], i+10 < n ? " " : "\n");
}
return 0;
}