Pagini recente » Cod sursa (job #274657) | Cod sursa (job #2900026) | Cod sursa (job #895328) | Cod sursa (job #1793229) | Cod sursa (job #2646165)
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define RADIX 0xFF
#define RADIX_SIZE 8
#define TOTAL_BYTES sizeof(a[0])
#define get_byte(x) ((x>>(byte * 8))&RADIX)
void countsort(vector <int> &A, vector <int> &B, int byte) {
int n = A.size();
int index[1<<RADIX_SIZE];
int counter[1<<RADIX_SIZE];
memset(counter, 0, sizeof counter);
for(int i = 0; i < n; i++) ++counter[get_byte(A[i])];
index[0] = 0;
for(int i = 1; i < 1<<RADIX_SIZE; i++) index[i] = index[i-1] + counter[i-1];
for(int i = 0; i < n; i++) B[index[get_byte(A[i])]++] = A[i];
}
int main() {
// ios::sync_with_stdio(0);
// cin.tie(0); cout.tie(0);
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
long long n, A, B, C;
cin >> n >> A >> B >> C;
vector <int> a(n), b(n); a[0] = B;
for(int i=1; i<n; i++) a[i] = (A * a[i-1] + B) % C;
for (int i = 0; i < TOTAL_BYTES; i ++) {
if(i&1) countsort(b, a, i);
else countsort(a, b, i);
}
for(int i=0; i<n; i+=10) cout << a[i] << " ";
return 0;
}