Cod sursa(job #3328490)

Utilizator MateiDiaconuDiaconu Matei Stefan MateiDiaconu Data 8 decembrie 2025 22:01:02
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("radixsort.in");
ofstream fout("radixsort.out");

#define MAX_N 10000000
#define MAX_BITS 32
#define BITS_PER_STEP 8
const int BASE = 1 << BITS_PER_STEP;
const int MASK = BASE - 1;


int v[MAX_N];
vector<int> bucket[BASE];


void radsort(int n, int bits){
    if(bits == MAX_BITS){
        return;
    }

    int i, b;
    unsigned int j;

    for(i = 0; i < n; i++){
        bucket[v[i] >> bits & MASK].push_back(v[i]);
    }

    i = 0;
    for(b = 0; b < BASE; b++){
        for(j = 0; j < bucket[b].size(); j++){
            v[i++] = bucket[b][j];
        }
        bucket[b].clear();
    }

    radsort(n, bits + BITS_PER_STEP);
}

int main()
{
    int n, a, b, c, i;

    fin>>n>>a>>b>>c;

    v[0] = b;
    for(i = 1; i < n; i++){
        v[i] = (1LL * a * v[i - 1] + b) % c;
    }

    radsort(n, 0);

    for(i = 0; i < n; i += 10){
        fout<<v[i]<<" ";
    }

    fin.close();
    fout.close();
    return 0;
}