Pagini recente » Cod sursa (job #849768) | Cod sursa (job #843085) | Cod sursa (job #2064880) | Cod sursa (job #2171277) | Cod sursa (job #2439442)
#include <stdio.h>
#include <string.h>
#define RADIX 0xFF
#define RADIX_SIZE 1 << 8
#define BUFFER_SIZE 1 << 17
#define NMAX 10000005
char buffer[BUFFER_SIZE];
int pos = BUFFER_SIZE;
int n, v[NMAX], count[RADIX_SIZE], temp[NMAX], byte;
inline char next() {
if (pos == BUFFER_SIZE) {
fread(buffer, 1, BUFFER_SIZE, stdin);
pos = 0;
}
return buffer[pos++];
}
inline int read() {
int x = 0;
char c = next();
while (!('0' <= c && c <= '9')) {
c = next();
}
while ('0' <= c && c <= '9') {
x = (x << 3) + (x << 1) + c - '0';
c = next();
}
return x;
}
inline void print(int x) {
char snum[65];
int i = 0;
do {
snum[i++] = x % 10 + '0';
x /= 10;
} while (x);
--i;
while (i >= 0) {
putchar(snum[i--]);
}
putchar(' ');
}
inline int get_byte(int x, int byte) {
return (x >> (byte * 8)) & RADIX;
}
inline void counting_sort() {
memset(count, 0, sizeof(count));
for (int i = 0 ; i < n ; ++i) {
count[get_byte(v[i], byte)]++;
}
for (int i = 1 ; i <= RADIX ; ++i) {
count[i] += count[i - 1];
}
for (int i = n - 1; i >= 0 ; --i) {
temp[--count[get_byte(v[i], byte)]] = v[i];
}
for (int i = 0 ; i < n ; ++i) {
v[i] = temp[i];
}
}
inline void radix_sort() {
for (; byte < 4 ; ++byte) {
counting_sort();
}
}
int main() {
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
int a, b, c;
n = read(), a = read(), b = read(), c = read();
v[0] = b % c;
for (int i = 1 ; i < n ; ++i) {
v[i] = (1LL * a * v[i - 1] + b) % c;
}
radix_sort();
for (int i = 0 ; i < n ; i += 10) {
print(v[i]);
}
return 0;
}