Cod sursa(job #1348111)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 19 februarie 2015 15:25:32
Problema Radix Sort Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#include <array>
#include <vector>

using namespace std;

#define IN_FILE "radixsort.in"
#define OUT_FILE "radixsort.out"
#define MAX_N 10000001

int v[ MAX_N ], N;
inline void radix( ) {
    array < vector < int >, ( 1 << 8 ) > b;
    for( register int i = 0; i < sizeof( int ); ++i ) {
        for( register int j = 0; j < N; ++j )
            b[ ( v[ j ] >> ( i << 3 ) ) & 0xFF ].push_back( v[ j ] );
        int *j = v;
        for( auto& bucket : b ) {
            for( auto buck : bucket )
                *( j++ ) = buck;
            bucket.clear( );
        }
    }
}
int main( ) {
    FILE *f;
    int A, B, C;

    f = fopen( IN_FILE, "r" );
    fscanf( f, "%d%d%d%d", &N, &A, &B, &C );
    fclose( f );
    *v = B;
    for( int i = 1; i != N; ++i )
        v[ i ] = ( 1LL * A * v[ i - 1 ] % C + B ) % C;
    radix( );
    f = fopen( OUT_FILE, "w" );
    for( int i = 0; i != N; i += 10 )
        fprintf( f, "%d ", v[ i ] );
    fclose( f );
    return 0;
}