Cod sursa(job #3302676)

Utilizator cosminccc7Cazacu Cosmin cosminccc7 Data 9 iulie 2025 21:47:09
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
using namespace std;

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

const int val = 1 << 16; // 2^16
int n, a, b, c, ct;
vector<int> A, B;
int cnt[val], pos[val];

int main() {
    in >> n >> a >> b >> c;
    A.resize(n);
    B.resize(n);

    long long x = b;
    A[0] = b;
    for (int i = 1; i < n; i++) {
        x = (1LL * x * a + b) % c;
        A[i] = x;
    }

    // Sortare după cei mai puțin semnificativi 16 biți
    memset(cnt, 0, sizeof(cnt));
    for (int i = 0; i < n; i++)
        cnt[A[i] & (val - 1)]++; // A[i] % 2^16

    pos[0] = 0;
    for (int i = 1; i < val; i++)
        pos[i] = pos[i - 1] + cnt[i - 1];

    for (int i = 0; i < n; i++)
        B[pos[A[i] & (val - 1)]++] = A[i];

    // Sortare după cei mai semnificativi 16 biți
    memset(cnt, 0, sizeof(cnt));
    for (int i = 0; i < n; i++)
        cnt[B[i] >> 16]++;

    pos[0] = 0;
    for (int i = 1; i < val; i++)
        pos[i] = pos[i - 1] + cnt[i - 1];

    for (int i = 0; i < n; i++)
        A[pos[B[i] >> 16]++] = B[i];

    // Afișare
    for (int i = 0; i < n; i++)
        if (i % 10 == 0)
            out << A[i] << " ";

    return 0;
}