Pagini recente » Cod sursa (job #347881) | Cod sursa (job #910556) | Cod sursa (job #1190567) | Cod sursa (job #797511) | Cod sursa (job #1249203)
#include <stdio.h>
#include <fstream>
using namespace std;
#define Nmax 10000005
// #define Base 65535
#define Base 255
int n, a, b, c;
int v[Nmax], u[Nmax], bucket[Base + 1];
ifstream f("radixsort.in");
ofstream g("radixsort.out");
int main(){
// freopen("radixsort.in", "r", stdin);
// freopen("radixsort.out", "w", stdout);
// scanf("%d %d %d %d", &n, &a, &b, &c);
f >> n >> a >> b >> c;
v[1] = b;
for (int i = 2; i <= n; ++i)
v[i] = (1LL * a * v[i - 1] + b) % c;
int power = 1;
for (int i = 1; Base >> i; ++i)
++power;
for (int i = 0; i < 32; i += power){
for (int j = 0; j <= Base; ++j)
bucket[j] = 0;
for (int j = 1; j <= n; ++j)
++bucket[(v[j] >> i) & Base];
for (int j = 1; j <= Base; ++j)
bucket[j] += bucket[j - 1];
for (int j = n; j > 0; --j)
u[bucket[(v[j] >> i) & Base]--] = v[j];
for (int j = 1; j <= n; ++j)
v[j] = u[j];
}
for (int i = 1; i <= n; i += 10)
// printf("%d ", v[i]);
g << v[i] << " ";
// printf("\n");
g << "\n";
return 0;
}