Pagini recente » ONIS 2014, Clasament | Cod sursa (job #59657) | Cod sursa (job #849283) | Cod sursa (job #775947) | Cod sursa (job #1096156)
#include<fstream>
#include<iostream>
#include<string.h>
using namespace std;
#define max_n 10000010
#define nr_oct 4
int V[max_n] , V2[max_n];
int n , a , b , c;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
void read(){
f>>n>>a>>b>>c;
V[0] = b % c;
for( int i = 1 ; i < n ; i++ )
V[i] = ( (long long)V[i-1] * a + b ) % c;
}
inline int get_oct( int x , int oct ){
return (x >> ( oct * 8 )) & 0xFF;
}
void count( int A[] , int B[] , int oct ){
int count[1<<8] , index[1<<8];
memset(count , 0 , sizeof(count));
for( int i = 0 ; i < n ; i++ )
count[ get_oct(A[i] , oct) ]++;
index[0] = 0;
for( int i = 1 ; i < (1<<8) ; i++ )
index[i] = index[i-1] + count[i-1];
for( int i = 0 ; i < n ; i++ )
B[ index[ get_oct(A[i] , oct) ]++ ] = A[i];
}
void print(){
for( int i = 0 ; i < n ; i += 10 )
g<<V[i]<<" ";
}
int main(){
read();
for( int i = 0 ; i < nr_oct ; i++ ){
if( i % 2 == 0 )
count( V , V2 , i );
else
count( V2 , V , i );
}
print();
return 0;
}