Cod sursa(job #2225004)

Utilizator HumikoPostu Alexandru Humiko Data 25 iulie 2018 17:42:24
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
#define lim 10000005

using namespace std;

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

int n, a, b, c;

int v[lim];
int current_Order[lim];
int f[1<<16];

void readInput()
{
    ios::sync_with_stdio(false);
    fin.tie(0); fout.tie(0);

    fin>>n>>a>>b>>c;
    v[1] = b;

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

void radixSort()
{
    const int mask = (1<<16)-1;

    for ( int bits = 0; bits < 32; bits += 16 )
    {
        for ( int i = 0; i <= mask+5; ++i )
            f[i] = 0;

        for ( int i = 1; i <= n; ++i )
        {
            int current_Number = (v[i]>>bits)&mask;
            f[current_Number]++;
        }

        for ( int i = 1; i <= mask; ++i )
            f[i] += f[i-1];

        for ( int i = n; i >= 1; --i )
        {
            int current_Number = (v[i]>>bits)&mask;
            current_Order[f[current_Number]--] = v[i];
        }

        for ( int i = 1; i <= n; ++i )
            v[i] = current_Order[i];
    }
}

int main()
{
    readInput();
    radixSort();

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