Pagini recente » Cod sursa (job #1982436) | Cod sursa (job #1343794) | Cod sursa (job #2909124) | Cod sursa (job #137709) | Cod sursa (job #2274835)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
const int NMax = 10000000;
int X[NMax + 5];
int CMax,N,A,B,C;
vector <int> Bucket[10];
void Build()
{
fin >> N >> A >> B >> C;
X[1] = B;
for(int i = 2; i <= N; ++i)
{
X[i] = (1LL *A * X[i-1] + B) % C;
CMax = max(CMax, (int)log10(X[i]));
}
}
void Print()
{
for(int i = 1; i <= N; i+=10)
fout << X[i] << " ";
fout << "\n";
}
void Radix(int p)
{
for(int i = 1; i <= N; ++i)
{
Bucket[X[i]/p%10].push_back(X[i]);
}
int k = 0;
for(int i = 0; i <= 9; ++i)
{
for(int j = 0; j < (int)Bucket[i].size(); ++j)
X[++k] = Bucket[i][j];
Bucket[i].clear();
}
}
int main()
{
Build();
for(int i = 0,p = 1; i <= CMax; ++i,p=p*10)
{
Radix(p);
}
Print();
return 0;
}