Cod sursa(job #2646165)

Utilizator saeed_odakSaeed Odak saeed_odak Data 31 august 2020 10:29:37
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#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;
}