Pagini recente » Cod sursa (job #2634205) | Cod sursa (job #3224702) | Cod sursa (job #2535002) | Cod sursa (job #343898) | Cod sursa (job #1348140)
#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;
array < vector < int >, ( 1 << 8 ) > b;
inline void radix( ) {
for( register unsigned i = 0; i < 4; ++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 ] = ( A * v[ i - 1 ] + 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;
}