Pagini recente » Cod sursa (job #1363141) | Cod sursa (job #2458218) | Cod sursa (job #2443950) | Cod sursa (job #1546490) | Cod sursa (job #2076847)
// VS workaround
#define _CRT_SECURE_NO_WARNINGS
#include <cmath>
#include <cstdio>
#include <vector>
#include <list>
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
void sort(const std::vector<int>& v, std::vector<int>& t, int byte) {
int mask = 0xFF;
int shift = byte * 8;
std::vector<int> count(mask + 2, 0);
// Frequencies
for (int x : v) {
int key = (x >> shift) & 0xFF;
count[key + 1]++;
}
// CDF
for (int i = 0; i < mask; i++) {
count[i + 1] += count[i];
}
// Put answer into output
for (int x : v) {
int key = (x >> shift) & 0xFF;
t[count[key]] = x;
count[key]++;
}
}
void print(const std::vector<int>& v) {
for (int x : v)
printf("%d ", x);
}
int main() {
int n, a, b, c;
FILE *f = fopen("radixsort.in", "r");
fscanf(f, "%d %d %d %d", &n, &a, &b, &c);
fclose(f);
std::vector<int> v(n);
std::vector<int> t(n);
v[0] = b;
for (int i = 1; i < n; i++)
v[i] = (1LL * a * v[i - 1] + b) % c;
sort(v, t, 0);
sort(t, v, 1);
sort(v, t, 2);
sort(t, v, 3);
f = fopen("radixsort.out", "w");
for (int i = 0; i < n; i += 10)
fprintf(f, "%d ", v[i]);
fclose(f);
return 0;
}