Cod sursa(job #2142297)

Utilizator sulzandreiandrei sulzandrei Data 24 februarie 2018 21:52:54
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
#define max_n 10000000+1
int v[max_n],B[max_n];
const int max_byte = (1<<8)-1, nr_bytes = sizeof(int);
inline int ithbyte(int n,int i){ return (n>>(i*8))&max_byte;}
void byte_numsort(int *A,int n, int byte_nr)
{
    int C[max_byte+1]{0},index[max_byte+1]{0};
    for(int i = 0 ; i < n ; i ++)
        C[ithbyte(A[i],byte_nr)]++;
    for(int i = 1 ; i <= max_byte; i++)
        index[i] = index[i-1]+C[i-1];
    for(int i = 0 ; i < n ; i++)
        B[index[ithbyte(A[i],byte_nr)]++] = A[i];
    memcpy(A,B,n*nr_bytes);
}
int main()
{
     int n,a,b,c;
    in >> n >> a >> b >> c;
    v[0] = b%c;
    for(int i = 1 ; i < n ; i++)
        v[i] =(1LL*a*v[i-1]%c+b)%c;
    for(int i = 0 ; i< nr_bytes ; i++)
        byte_numsort(v,n,i);
    for(int i = 0 ; i < n ; i +=10)
        out << v[i] << " ";
    return 0;
}