Cod sursa(job #1887105)

Utilizator DanielRusuDaniel Rusu DanielRusu Data 21 februarie 2017 12:50:05
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <cstdio>
#include <queue>

using namespace std;

#define DIM 10000005

queue <int> Q[256];
int V[DIM];

int main() {
    freopen("radixsort.in","r",stdin);
    freopen("radixsort.out","w",stdout);

    int N, A, B, C;
    scanf("%d %d %d %d\n", &N, &A, &B, &C);

    V[1] = B % C;
    for(int i = 2; i <= N; ++i) {
        V[i] = (1LL * A * V[i - 1] + B) % C;
    }

    int pos;
    for(int bit = 0; bit < 32; bit += 8) {
        pos = 0;
        for(int i = 1; i <= N; ++i) {
            Q[(V[i]>>bit)&255].push(V[i]);
        }

        for(int i = 0; i < 256; ++i) {
            while(!Q[i].empty()) {
                V[++pos] = Q[i].front();
                Q[i].pop();
            }
        }
    }

    for(int i = 1; i <= N; i += 10) {
        cout << V[i] << ' ';
    }

    cout << '\n';

    return 0;
}