Cod sursa(job #2607904)

Utilizator Silviu.Stancioiu@gmail.comSilviu Stancioiu [email protected] Data 30 aprilie 2020 13:05:43
Problema Radix Sort Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main()
{
    unsigned long long n, a, b, c;

    ifstream fin("radixsort.in");
    fin >> n >> a >> b >> c;
    fin.close();

    uint32_t* v = new uint32_t[n + 1];
    v[1] = b;
    for (int i = 2; i <= n; i++)
        v[i] = (a * v[i - 1] + b) % c;

    uint32_t* tmp = new uint32_t[n + 1];

    uint32_t* crt = v;
    uint32_t* next = tmp;
    int sz[256];

    for (int i = 0; i < 4; i++)
    {
        memset(sz, 0, sizeof(int) * 256);

        for (int j = 1; j <= n; j++)
        {
            int index = (crt[j] >> (8 * i)) & 255;
            sz[index]++;
        }

        for (int j = 1; j < 256; j++)
            sz[j] += sz[j - 1];

        for (int j = n; j >= 1; j--)
        {
            int index = (crt[j] >> (8 * i)) & 255;
            next[--sz[index]] = crt[j];
        }

        uint32_t* t = crt;
        crt = next;
        next = t;
    }

    ofstream fout("radixsort.out");
    
    for (int i = 0; i < n; i += 10)
        fout << crt[i] << " ";
    
    fout.close();

    delete[] v;
    delete[] tmp;

    return 0;
}