Cod sursa(job #1754998)

Utilizator meriniucrMeriniuc Razvan- Dumitru meriniucr Data 9 septembrie 2016 10:17:09
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <queue>

int n;
int arr[10000000];
std::queue <int> zero;
std::queue <int> one;

void
go()
{
    int index;
    int j;
    int bit;
    int temp;

    for (index = 0; index < 31; ++index)
    {
        bit = 1 << index;
        for (j = 0; j < n; ++j)
        {
            if ( bit & arr[j] )
            {
                one.push(arr[j]);
            }
            else
            {
                zero.push(arr[j]);
            }
        }

        temp = zero.size();
        for (j = 0; j < temp; ++j)
        {
            arr[j] = zero.front();
            zero.pop();
        }

        for (; j < n; ++j)
        {
            arr[j] = one.front();
            one.pop();
        }
    }
}

int main()
{
    int index;
    long long a;
    long long b;
    long long c;

    std::ifstream mama("radixsort.in");
    std::ofstream tata("radixsort.out");

    mama >> n;
    mama >> a >> b >> c;

    arr[0] = b;
    for (index = 1; index < n; ++index)
    {
        arr[index] = (a * arr[index - 1] + b) % c;
    }

    go();

    for (index = 0; index < n; index += 10)
    {
        tata << arr[index] << ' ';
    }

    return 0;
}