Pagini recente » Cod sursa (job #1186788) | Cod sursa (job #824072) | Cod sursa (job #2629128)
#include<bits/stdc++.h>
using namespace std;
//buckets of bytes
#define maxb 8
#define bucket 0xFF
#define total_bytes (sizeof(vec[1]))
#define get_byte(x) ((x>>(byte*8))&bucket)
int n,a,b,c;
int* read(){
cin>>n>>a>>b>>c;
int *v=new int[n];
v[0]=b;
for(int i=1; i<n; i++)
v[i]=(1LL*a*v[i-1]+b)%c;
return v;
}
void countSort(int byte, int *vec){
int count[1<<maxb];
int index[1<<maxb];
int aux[n+5];
index[0]=0;
memset(count,0,sizeof(count));
for(int i=0; i<n; ++i)
count[get_byte(vec[i])]++;
for(int i=1; i<(1<<maxb); ++i)
index[i]=index[i-1]+count[i-1];
for(int i=0; i<n; i++)
aux[index[get_byte(vec[i])]++]=vec[i];
for(int i=0; i<n; i++)
vec[i]=aux[i];
}
int main(){
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
int *vec=read();
for(int bit=0; bit<total_bytes; ++bit)
countSort(bit,vec);
for(int i=0; i<n; i+=10)
cout<<vec[i]<<' ';
}