Cod sursa(job #2282838)

Utilizator I_am_not_a_robotMr Domino I_am_not_a_robot Data 14 noiembrie 2018 16:08:03
Problema Radix Sort Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>

using namespace std;

const int N=10000000+5;

int n,a,b,c,v[N],aux[N];

int f[(1<<16)+5];

int main()
{
    freopen("radixsort.in","r",stdin);
    freopen("radixsort.out","w",stdout);
    scanf("%d%d%d%d",&n,&a,&b,&c);
    v[1]=b;
    for(register int i=2;i<=n;i++)
    {
        v[i]=(a*(long long)v[i-1]+b)%c;
    }
    /// second part
    for(register int i=1;i<=n;i++)
    {
        f[v[i]%(1<<16)]++;
    }
    for(register int i=1;i<(1<<16);i++)
    {
        f[i]+=f[i-1];
    }
    for(register int i=1;i<=n;i++)
    {
        aux[f[v[i]%(1<<16)]--]=v[i];
    }
    /// first part
    for(register int i=0;i<(1<<16);i++)
    {
        f[i]=0;
    }
    for(register int i=1;i<=n;i++)
    {
        f[aux[i]/(1<<16)]++;
    }
    for(register int i=1;i<(1<<16);i++)
    {
        f[i]+=f[i-1];
    }
    for(register int i=n;i>=1;i--)
    {
        v[f[aux[i]/(1<<16)]--]=aux[i];
    }
    for(register int i=1;i<=n;i+=10)
    {
        printf("%d ",v[i]);
    }
    printf("\n");
    return 0;
}