Cod sursa(job #2025067)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 21 septembrie 2017 20:22:34
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <iostream>
#include <queue>
using namespace std;
ifstream fin ("radixsort.in");
ofstream fout ("radixsort.out");
long long n,a,b,c,i,maxi,curent,rsp,stop;
int v[10000005];
queue < int > q[260];
int main()
{
    fin>>n>>a>>b>>c;
    for( i = 1 ; i <= n ; i++ )
    {
        v[ i ] = ( 1LL* v[ i - 1 ] * a + b ) % c;
        maxi = max( maxi , v[ i ] * 1LL );
    }
    curent = 1;
    stop = 1;
    while( stop )
    {
        for( i = 1 ; i <= n ; i++ )
        {
            a = ( v[ i ] / curent ) % 256;
            q[ a ].push( v[ i ] );
        }
        rsp = 0;
        for( i = 0 ; i <= 256 ; i++ )
        {
            while( q[ i ].size() )
            {
                v[ ++rsp ] = q[ i ].front();
                q[ i ].pop();
            }
        }
        if( maxi / 256 < curent )
            stop = 0;
        else
            curent *= 256;
    }
    for( i = 0 ; i < n / 10; i++ )
        fout<<v[ 10 * i + 1 ]<<" ";
}