Pagini recente » Cod sursa (job #1862815) | Cod sursa (job #323427) | Cod sursa (job #1585075) | Cod sursa (job #293264) | Cod sursa (job #2393736)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
const int NMax = 1e7, Baza = 1 << 9;
int N;
struct str{int val, cif;} V[NMax + 5];
vector <str> A[Baza + 5];
void Read()
{
int A, B, C;
fin >> N >> A >> B >> C; V[1].val = V[1].cif = B;
for(int i = 2; i <= N; i++)
V[i].val = V[i].cif = (1LL * A * V[i - 1].val + B) % C;
}
void Print()
{
for(int i = 1; i <= N; i += 10)
fout << V[i].val << " ";
fout << '\n';
}
void Sort()
{
for(int i = 1; i <= N; i++)
A[V[i].cif % Baza].push_back(V[i]);
int K = 0;
for(int i = 0; i <= Baza; i++)
while(A[i].size())
V[++K] = A[i].back(), A[i].pop_back();
}
void Solve()
{
int ok = 1;
while(ok) {
Sort(); ok = 0;
for(int i = 1; i <= N; i++)
{
V[i].cif /= Baza;
if(V[i].cif) ok = 1;
}
}
}
int main()
{
Read();
Solve();
Print();
return 0;
}