Pagini recente » Cod sursa (job #3153032) | Cod sursa (job #903370) | Cod sursa (job #1709399) | Cod sursa (job #146328) | Cod sursa (job #2451158)
#include <bits/stdc++.h>
using namespace std;
size_t v[10000001], A, B, C, N;
vector<vector<size_t>> buckets(10, vector<size_t>());
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int main()
{
fin >> N >> A >> B >> C;
v[1] = B;
size_t MAX{B};
for(size_t i = 2; i <= N; i++)
{
v[i] = (1LL * A * v[i - 1] + B) % C;
MAX = max(MAX, v[i]);
}
size_t nr{0};
while(MAX)
{
nr++;
MAX /= 10;
}
for(size_t c = 0; c < nr; c++)
{
for(size_t i = 1; i <= N; i++)
{
size_t copy_c = c;
size_t copy_v = v[i];
while(copy_c && copy_v){
copy_v /= 10;
copy_c --;
}
buckets[copy_v%10].push_back(v[i]);
}
size_t line = 0;
size_t column = 0;
for(size_t i = 1; i <= N; i++)
{
if(column == buckets[line].size())
{
column = 0;
line++;
while(buckets[line].size() == 0) line++;
}
v[i] = buckets[line][column];
column++;
}
for(size_t i = 0; i < 10; i++) buckets[i].clear();
}
for(size_t i = 1; i <= N; i += 10) fout << v[i] << " ";
}