Cod sursa(job #1959396)

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