Cod sursa(job #1317726)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 15 ianuarie 2015 08:05:50
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <vector>

#define pb push_back

using namespace std;

int vv[10000010];
vector <int> v[10];

inline void del ()
{
    vector <int> s[10];
    for (int i = 0; i <= 9; ++i)
        v[i].swap (s[i]);
}

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

    int n;
    long long a, b, c;
    scanf ("%d %lld %lld %lld", &n, &a, &b, &c);

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

    int r = 1;
    for (int i = 1; i <= 9; ++i)
    {
        for (int i = 1; i <= n; ++i)
            v[vv[i] / r % 10].pb (vv[i]);

        int k = 0;
        for (int i = 0; i <= 9; ++i)
            for (int j = 0; j < v[i].size (); ++j)
                vv[++k] = v[i][j];

        del ();
        r *= 10;
    }

    for (int i = 1; i <= n; i += 10)
        printf ("%d ", vv[i]);

    printf ("\n");

    return 0;
}