Cod sursa(job #1129770)

Utilizator dumitrualexAlex Dumitru dumitrualex Data 28 februarie 2014 09:09:07
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <vector>
#include <queue>
#define nmax 10000000+5
using namespace std;

queue<int> cozi[5];
int v[nmax];
int l[5];
int N, A, B, C;

void parcurgereCozi(int p)
{
    int i, j;
    for (i = 0; i <= 1; i++)
        l[i] = cozi[i].size();

    for (i = 0; i <= 1; i++)
    {
        for (j = 0; j < l[i]; j++)
        {
            cozi[(cozi[i].front()&(1<<p))!=0].push(cozi[i].front());
            cozi[i].pop();
        }
    }
}

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

    int i, j;

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

    for (i = 1; i <= N; i++)
    {
        if (v[i] == 1)
            v[i] = B;
        else
            v[i] = (A * v[i-1] + B) % C;
        cozi[0].push(v[i]);
    }

    for (i = 0; i < 31; i++)
        parcurgereCozi(i);

    j = 0;
    for (i = 0; i <= 1; i++)
        while (!cozi[i].empty())
        {
            ++j;
            if ((j-1)%10 == 0)
                printf("%d ", cozi[i].front());
            cozi[i].pop();
        }
    printf("\n");

    return 0;
}