Mai intai trebuie sa te autentifici.
Cod sursa(job #1691703)
Utilizator | Data | 19 aprilie 2016 11:15:48 | |
---|---|---|---|
Problema | Radix Sort | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.89 kb |
#include<fstream>
#include<cstring>
#define DIM 10000005
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int cifra( int nr, int p ){
return( (nr>>p) & 255 );
}
int p, x[DIM], v[DIM], A, B, C, n, f[260];
int main(){
fin >> n >> A >> B >> C;
v[1] = B;
for( int i = 2; i <= n; i++ ){
v[i] = ( A * 1LL * v[i - 1] + B ) % C;
}
p = 0;
for( int t = 1; t <= 4; t++ ){
memset( f, 0, sizeof(f) );
for( int i = 1; i <= n; i++ ){
f[ cifra( v[i], p ) ]++;
}
for( int i = 1; i <= 255; i++ ){
f[i] += f[i - 1];
}
for( int i = n; i >= 1; i-- ){
x[ f[cifra( v[i], p )]-- ] = v[i];
}
memcpy( v, x, sizeof( x ) );
p += 8;
}
for( int i = 1; i <= n; i += 10 ){
fout << v[i] << " ";
}
return 0;
}