Cod sursa(job #2649403)

Utilizator buhaidarius@gmail.comBuhai Darius [email protected] Data 14 septembrie 2020 17:08:16
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb

#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;
}