Cod sursa(job #2450282)

Utilizator ejoi2019Ejoi 2019 ejoi2019 Data 22 august 2019 15:48:06
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <cstdio>

using namespace std;

const int N=10000000+7;
const int RAD=(1<<16);
int n;
int a,b,c;
int v[N];
int aux[N];
int f[RAD];

void clr_f()
{
        for(int i=0;i<RAD;i++)
                f[i]=0;
}

void add_up()
{
        for(int i=1;i<RAD;i++)
                f[i]+=f[i-1];
}

void cop()
{
        for(int i=1;i<=n;i++)
                v[i]=aux[i];
}

int main()
{
        freopen("radixsort.in","r",stdin);
        freopen("radixsort.out","w",stdout);

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

        clr_f();
        for(int i=1;i<=n;i++)
                f[v[i]%RAD]++;
        add_up();
        for(int i=n;i>=1;i--)
                aux[f[v[i]%RAD]--]=v[i];
        cop();

        clr_f();
        for(int i=1;i<=n;i++)
                f[v[i]/RAD]++;
        add_up();
        for(int i=n;i>=1;i--)
                aux[f[v[i]/RAD]--]=v[i];
        cop();

        for(int i=1;i<=n;i+=10)
                printf("%d ",v[i]);
        printf("\n");

        return 0;
}