Cod sursa(job #1675714)

Utilizator serbanSlincu Serban serban Data 5 aprilie 2016 15:16:06
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>

#define mod 32
#define mask 1023

using namespace std;

int n;
long long v[10000005][2];

void radixSort(int i) {
    int ind[1024], cnt[1024];
    memset(cnt, 0, sizeof(cnt));

    int j = i & 1;
    for(int k = 0; k < n; k ++) cnt[(v[k][j] >> (i * mod)) & mask] ++;
    ind[0] = 0;
    for(int k = 1; k <= mask; k ++)
        ind[k] = ind[k - 1] + cnt[k - 1];
    for(int k = 0; k < n; k ++)
        v[ind[(v[k][j] >> (i * mod)) & mask] ++][j ^ 1] = v[k][j];
}

int main()
{
    ifstream f("radixsort.in");
    ofstream g("radixsort.out");
    int a, b, c;
    f >> n >> a >> b >> c;
    v[0][0] = b % c;
    for(int i = 1; i < n; i ++)
        v[i][0] = ((1LL * a * v[i - 1][0] + b) % c);

    const int lim = sizeof(v[0][0]);

    for(int i = 0; i < 2; i ++) {
        radixSort(i);
    }

    for(int i = 0; i < n; i += 10) g << v[i][0] << " ";
    g << "\n";
    return 0;
}