Cod sursa(job #2356359)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 26 februarie 2019 17:14:15
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

#define RADIX 0xFF
#define bit(x) ((x >> (bite * 8)) & RADIX)

using namespace std;

ifstream f ("radixsort.in");
ofstream g ("radixsort.out");

int n, a, b, c, Max;

long long p;

int v[10000005];
int temp[10000005];

inline void SORT (int A[], int B[], int bite)
{
    int cnt[(1 << 8)];
    int ord[(1 << 8)];

    memset(cnt, 0, sizeof(cnt));
	memset(ord, 0, sizeof(ord));

    for (int i = 1; i <= n; ++i)
    {
        ++cnt[bit(A[i])];
    }

    ord[0] = 0;

    for (int i = 1; i < (1<<8); ++i)
    {
        ord[i] = ord[i-1] + cnt[i-1];
    }

    for (int i = 1; i <= n; ++i)
    {
        B[++ord[bit(A[i])]] = A[i];
    }
}
int main()
{
    f >> n >> a >> b >> c;
    v[1] = b;

    for (int i = 2; i <= n; ++i)
    {
        v[i] = (1LL * v[i-1] * a + b) % c;
    }

    int total = sizeof(v[1]);

    for (int i = 0; i < total; ++i)
    {
        if (i % 2 == 0)
            SORT(v, temp, i);
        else SORT(temp, v, i);
    }

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