Pagini recente » Cod sursa (job #2349207) | Cod sursa (job #260953) | Cod sursa (job #224807) | Cod sursa (job #2116169) | Cod sursa (job #2539090)
#include <fstream>
std::ifstream f("radixsort.in");
std::ofstream g("radixsort.out");
const int NMAX = 10000005;
int N,A,B,C,v[NMAX],fr[256],w[NMAX];
inline int digit(int n,long long p){
return ((n >> p) & 255);
}
int main(){
f >> N >> A >> B >> C;
v[1] = B;
for(int i = 2;i <= N;++i)
v[i] = (A * v[i - 1] + B) % C;
long long p = 0;
for(int t = 1;t <= 4;++t){
for(int i = 0;i <= 255;++i)
fr[i] = 0;
for(int i = 1;i <= N;++i)
fr[digit(v[i],p)]++;
for(int i = 1;i <= 255;++i)
fr[i] += fr[i - 1];
for(int i = N;i >= 1;--i)
w[ fr[digit(v[i],p)]-- ] = v[i];
for(int i = 1;i <= N;++i)
v[i] = w[i];
p += 8;
}
for(int i = 1;i <= N;i += 10)
g << v[i] << ' ';
return 0;
}