Pagini recente » Cod sursa (job #1667146) | Cod sursa (job #1865020) | Cod sursa (job #3124803) | Cod sursa (job #987863) | Cod sursa (job #2753456)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
vector<int> Generate(int n, int a, int b, int c) {
vector<int> vec(n);
vec[0] = b;
for (int i = 1; i < n; i += 1) {
vec[i] = (1LL * a * vec[i - 1] + b) % c;
}
return vec;
}
void Sort(vector<int>& vec) {
vector<int> aux(vec.size());
for (int i = 0; i < (int)sizeof(int); i += 1) {
auto index = [i](int num) {
return (num >> (8 * i)) & 0xFF;
};
vector<int> count((1 << 8) + 1, 0);
for (const auto& num : vec) {
count[index(num) + 1] += 1;
}
for (size_t j = 1; j < count.size(); j += 1) {
count[j] += count[j - 1];
}
for (const auto& num : vec) {
aux[count[index(num)]] = num;
count[index(num)] += 1;
}
swap(vec, aux);
}
if (sizeof(int) % 2 == 1) {
swap(vec, aux);
}
}
int main() {
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int n, a, b, c;
fin >> n >> a >> b >> c;
auto vec = Generate(n, a, b, c);
Sort(vec);
for (int i = 0; i < n; i += 10) {
fout << vec[i] << " ";
}
fout << "\n";
return 0;
}