Cod sursa(job #2282835)

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

using namespace std;

const int N=10000000+5;
const int MOD=65536; /// (1<<16)

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

int f[MOD+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(int i=2;i<=n;i++)
    {
        v[i]=(a*(long long)v[i-1]+b)%c;
    }
    /// second part
    for(int i=1;i<=n;i++)
    {
        f[v[i]%MOD]++;
    }
    for(int i=1;i<MOD;i++)
    {
        f[i]+=f[i-1];
    }
    for(int i=1;i<=n;i++)
    {
        aux[f[v[i]%MOD]--]=v[i];
    }
    /// first part
    for(int i=0;i<MOD;i++)
    {
        f[i]=0;
    }
    for(int i=1;i<=n;i++)
    {
        f[aux[i]/MOD]++;
    }
    for(int i=1;i<MOD;i++)
    {
        f[i]+=f[i-1];
    }
    for(int i=n;i>=1;i--)
    {
        v[f[aux[i]/MOD]--]=aux[i];
    }
    for(int i=1;i<=n;i+=10)
    {
        printf("%d ",v[i]);
    }
    printf("\n");
    return 0;
}