Cod sursa(job #1869613)

Utilizator silkMarin Dragos silk Data 6 februarie 2017 00:12:14
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#include <deque>
#define NMax 10000000
#define VMax 256
using namespace std;

deque<int> q[VMax+1];
int v[NMax+1];

int main(){
    FILE* fin = fopen("radixsort.in","r");
    FILE* fout = fopen("radixsort.out","w");

    int i,x,y,N,A,B,C;

    fscanf(fin,"%d %d %d %d",&N,&A,&B,&C);
    for(v[1] = B, i = 2; i <= N; ++i) v[i] = (1LL * A * v[i-1] + B) % C;
    for(x = 0; x < 3; ++x)
    {
        for(i = 1; i <= N; ++i){
            y = (v[i] >> (8 * x)) & 255;
            q[y].push_back(v[i]);
        }
        for(N = i = 0; i < 256; ++i)
        while(!q[i].empty()){
            v[++N] = q[i].front();
            q[i].pop_front();
        }
    }

    for(i = 1; i <= N; i += 10) fprintf(fout,"%d ",v[i]);
    fclose(fin);
    fclose(fout);


return 0;
}