Pagini recente » Cod sursa (job #892622) | Cod sursa (job #3310013) | Cod sursa (job #3317849) | Cod sursa (job #3310034) | Cod sursa (job #3328290)
//https://www.infoarena.ro/problema/radixsort
//#pragma GCC optimize("O3")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("fast-math")
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("inline")
//#define _USE_MATH_DEFINES
//#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
//#include <vector>
#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
//#include <stack>
//#include <utility>
//#include <algorithm>
//#include <string>
//#include <map>
//#include <unordered_map>
//#include <set>
//#include <unordered_set>
//#include <cstdint>
//#include <climits>
//#include <iomanip>
//#include <cstdio>
//#include <tuple>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
const int NRMAX = 10000000;
const int MAXB = 32;
constexpr int BASE = (1 << 8);
constexpr int MASK = BASE - 1;
int v[NRMAX], rez[NRMAX];
int fr[BASE], it[BASE];
void radixsort(int v[], int nevv[], int n, int b)
{
if (b == MAXB)
return;
memset(fr, 0, sizeof fr);
for (int i = 0; i < n; ++i)
++fr[(v[i] >> b & MASK)];
it[0] = 0;
for (int i = 1; i < BASE; ++i)
it[i] = it[i - 1] + fr[i - 1];
for (int i = 0; i < n; ++i)
{
int nr = (v[i] >> b & MASK);
rez[it[nr]] = v[i];
++it[nr];
}
radixsort(rez, v, n, b + 8);
}
int main()
{
int n, a, b, c;
fin >> n >> a >> b >> c;
v[0] = b;
for (int i = 1; i < n; ++i)
v[i] = (a * v[i - 1] + b) % c;
radixsort(v, rez, n, 0);
for (int i = 0; i < n; i += 10)
fout << rez[i] << " ";
return 0;
}