Pagini recente » Cod sursa (job #1635679) | Cod sursa (job #697065) | Cod sursa (job #2753908) | Cod sursa (job #2806917) | Cod sursa (job #2055454)
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
ifstream fi("radixsort.in");
ofstream fo("radixsort.out");
#define BUFMAX 11000000
int bufcnt = BUFMAX - 1; char buf[BUFMAX];
//inline void write(int x) {
// buf[bufcnt--] = ' ';
// do buf[bufcnt--] = x % 10 + '0', x /= 10; while (x);
//}
//inline void flush() { fo.write(buf + bufcnt + 1, BUFMAX - bufcnt - 2); }
#define MAX 10000001
int v[MAX], w[MAX], x[0x100];
inline void radix(int n, int v[], int w[], int bit) {
memset(x, 0, sizeof x);
for (int i = 1; i <= n; i++) x[v[i] >> bit & 0xff]++;
for (int i = 1; i < 0x100; i++) x[i] += x[i - 1];
for (int i = n; i > 0; i--) w[x[v[i] >> bit & 0xff]--] = v[i];
}
int main() {
int n, a, b, c; fi >> n >> a >> b >> c; a %= c, b %= c;
v[1] = b; for (int i = 2; i <= n; i++) v[i] = (1ULL * 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 = n - (n - 1) % 10; i > 0; i -= 10) {
int x = v[i];
buf[bufcnt--] = ' ';
do buf[bufcnt--] = x % 10 + '0', x /= 10; while (x);
}
fo.write(buf + bufcnt + 1, BUFMAX - bufcnt - 2);
//write(v[i]); flush();
}