Pagini recente » Cod sursa (job #315741) | Cod sursa (job #176449) | Cod sursa (job #2006953) | Rating martin alexandru (Alexandru11) | Cod sursa (job #2055239)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("radixsort.in");
ofstream fo("radixsort.out");
#define MAX 10000000
int v[MAX], w[MAX];
void radix(int n, int v[], int w[], int bit) {
int x[0x100]; memset(x, 0, sizeof x);
for (int i = 0; i < n; i++) x[(v[i] >> bit) & 0xff]++;
for (int i = 0xff; i > 0; i--) x[i] = x[i - 1]; x[0] = 0;
for (int i = 1; i < 0x100; i++) x[i] += x[i - 1];
for (int i = 0; i < n; i++) w[x[(v[i] >> bit) & 0xff]++] = v[i];
}
#define BUFMAX 0x100000
int bufcnt; char buf[BUFMAX];
void write(int x) {
int digcnt = 0; char dig[11];
dig[digcnt++] = ' ';
while (x) dig[digcnt++] = x % 10 + '0', x /= 10;
for (int i = digcnt - 1; i >= 0; i--) {
if (bufcnt == BUFMAX) fo.write(buf, bufcnt), bufcnt = 0;
buf[bufcnt++] = dig[i];
}
}
void flush() { fo.write(buf, bufcnt); }
int main() {
int n, a, b, c; fi >> n >> a >> b >> c;
v[0] = b; for (int i = 1; i < n; i++) v[i] = (1LL * a * v[i - 1] + b) % c;
radix(n, v, w, 0);
radix(n, w, v, 8);
radix(n, v, w, 16);
radix(n, w, v, 24);
//for (int i = 0; i < n; i += 10) fo << v[i] << ' ';
for (int i = 0; i < n; i += 10) write(v[i]); flush();
}