Cod sursa(job #2613762)

Utilizator Horia14Horia Banciu Horia14 Data 10 mai 2020 17:07:41
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
#include<iostream>
#include<vector>
#define BITS 16
#define MASK ((1 << BITS) - 1)
#define MAX_N 10000000
using namespace std;

int v[MAX_N + 1], aux[MAX_N + 1];

void radixSort(int x[], int Size, int y[], int bits) {
    vector<int>g[1 << BITS];
    for(int i = 0; i < Size; ++i) {
        int nrList = (x[i] >> bits) & MASK;
        g[nrList].emplace_back(x[i]);
    }
    int len = 0;
    for(unsigned i = 0; i <= MASK; i++) {
        for(unsigned j = 0; j < g[i].size(); ++j)
            y[len++] = g[i][j];
    }
}

int main() {
    int n, a, b, c;
    ifstream fin("radixsort.in");
    ofstream fout("radixsort.out");
    fin >> n >> a >> b >> c;
    v[0] = b;
    for(int i = 1; i < n; ++i)
        v[i] = (1LL * a * v[i - 1] + b) % c;

    radixSort(v, n, aux, 0);
    radixSort(aux, n, v, BITS);
    for(int i = 0; i < n; i += 10)
        fout << v[i] << " ";

    fout << "\n";
    fin.close();
    fout.close();
    return 0;
}