Pagini recente » il padrino sono io | Profil tudorbuhnia | Cod sursa (job #2932613) | Cod sursa (job #2097025) | Cod sursa (job #2649403)
#include <bits/stdc++.h>
#define RADIX 0xFF
#define RADIX_SIZE 8
#define TOTAL_BYTES sizeof(a[0])
#define get_byte(x) ((x>>(byte * 8))&RADIX)
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
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() {
long long n, A, B, C;
fin >> 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)
fout << a[i] << " ";
return 0;
}