Cod sursa(job #2375332)

Utilizator Mada2003Madalina Scarlat Mada2003 Data 8 martie 2019 01:31:41
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb

#include<bits/stdc++.h>
#define radix 0xFF
#define get_byte(x) ((x>>(byte*8))&radix)

using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
int n,A,B,C;
int a[10000002];
inline void count_sortare(int A[],int B[],int byte)
{
    int val1[256];
    int val2[256];
    memset(val1,0,sizeof(val1));
    memset(val2,0,sizeof(val2));
    for(int i=1;i<=n;i++)
    {
        val1[get_byte(A[i])]++;
    }
    val2[0]=0;
    for(int i=1;i<256;i++)
    {
        val2[i]=val2[i-1]+val1[i-1];
    }
    for(int i=1;i<=n;i++)
    {
        B[++val2[get_byte(A[i])]]=A[i];
    }
}
inline void sortare()
{
    int val[n+5];
    memset(val,0,sizeof(val));
    int m=sizeof(a[1]);
    for(int i=0;i<m;i++)
    {
        if(i%2==0)
        {
            count_sortare(a,val,i);
        }
        else count_sortare(val,a,i);
    }
}
int main()
{
    f>>n>>A>>B>>C;
    a[1]=B;
    for(int i=2;i<=n;i++)
    {
        a[i]=(1LL*A*a[i-1]+B)%C;
    }
    sortare();
    for(int i=1;i<=n;i+=10)
    {
        g<<a[i]<<' ';
    }
    return 0;
}