Pagini recente » Cod sursa (job #309624) | Cod sursa (job #2438836) | Cod sursa (job #2592376) | Cod sursa (job #1177335) | Cod sursa (job #1492212)
/*#include <fstream>
#include <queue>
#include <algorithm>
#define MaxN 10000005
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int N, A, B, C, v[MaxN];
queue<int> q[10];
int main() {
fin >> N >> A >> B >> C;
int largestNumber = B;
v[1] = B;
for (int i = 2; i <= N; ++i) {
v[i] = (1LL * A * v[i - 1] + B) % C;
largestNumber = max(largestNumber, v[i]);
}
int iterCount = 0;
while (largestNumber > 0) {
largestNumber /= 10;
++iterCount;
}
int d = 1;
for (; iterCount > 0; --iterCount) {
for (int i = 1; i <= N; ++i) {
int divisor = v[i] / d;
q[divisor % 10].push(v[i]);
}
int k = 0;
for (int i = 0; i <= 9; ++i) {
while (!q[i].empty()) {
v[++k] = q[i].front();
q[i].pop();
}
}
d *= 10;
}
for (int i = 1; i <= N; i += 10) {
fout << v[i] << ' ';
}
return 0;
}*/
#include <fstream>
#include <queue>
#include <algorithm>
#define MaxN 10000005
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int N, A, B, C, v[MaxN];
queue<int> q[16];
int main() {
fin >> N >> A >> B >> C;
int largestNumber = B;
v[1] = B;
for (int i = 2; i <= N; ++i) {
v[i] = (1LL * A * v[i - 1] + B) % C;
largestNumber = max(largestNumber, v[i]);
}
int iterCount = 0;
while (largestNumber > 0) {
largestNumber = largestNumber >> 4;
++iterCount;
}
int d = 0;
for (; iterCount > 0; --iterCount) {
for (int i = 1; i <= N; ++i) {
int divisor = v[i] >> d;
q[divisor & 15].push(v[i]);
}
int k = 0;
for (int i = 0; i <= 15; ++i) {
while (!q[i].empty()) {
v[++k] = q[i].front();
q[i].pop();
}
}
d += 4;
}
for (int i = 1; i <= N; i += 10) {
fout << v[i] << ' ';
}
return 0;
}