Pagini recente » Cod sursa (job #2752221) | Istoria paginii utilizator/caraianioana | Cod sursa (job #1707524) | Cod sursa (job #992081) | Cod sursa (job #2134447)
#include <bits/stdc++.h>
using namespace std;
const int base = 256;
int n, v[10000005];
vector<int> buckets[base];
void list_to_buckets(int64_t it)
{
for (int64_t i = 0; i < base; ++i)
buckets[i].clear();
for (int64_t i = 1; i <= n; ++i){
int64_t dig = v[i]%it;
dig /= (it/base);
buckets[dig].push_back(v[i]);
}
}
void buckets_to_list()
{
int p = 0;
for (int i = 0; i < base; ++i)
for (vector<int>::iterator it = buckets[i].begin(); it != buckets[i].end(); ++it)
v[++p] = *it;
}
int main()
{
ifstream fin ("radixsort.in");
ofstream fout ("radixsort.out");
fin >> n;
int64_t a, b, c;
fin >> a >> b >> c;
v[1] = b;
for (int64_t i = 2; i <= n; ++i)
v[i] = (a*v[i-1]+b)%c;
int64_t it = base;
for (int64_t i = 1; i <= 4; ++i){
if(i%2 == 1)list_to_buckets(it);
else buckets_to_list();
it *= base;
}
for (int64_t i = 1; i <= n; i += 10)
fout << v[i] << " ";
return 0;
}