Pagini recente » Cod sursa (job #807717) | Cod sursa (job #1224536)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#define MAXN 10000010
#define BASE 256
using namespace std;
int a, b, c, n, v[MAXN];
void citire()
{
scanf("%d%d%d%d", &n, &a, &b, &c);
v[1] = b;
for (int i = 2; i <= n; i++)
v[i] = (1LL * a * v[i-1] + b) % c;
}
void sol()
{
/* vector<int> bucket[BASE];
int m = maxim, len = 1, nq = 0;
while (m != 0) {len *= BASE; m /= BASE;}
for (int i = 1; i < len; i *= BASE)
{
nq = 1;
for (int j = 1; j <= n; j++)
bucket[(v[j] / i) % BASE].push_back(v[j]);
for (int j = 0; j < BASE; j++)
{
for (int k = 0; k < bucket[j].size(); k++)
v[nq++] = bucket[j][k];
bucket[j].clear();
}
}*/
int nq;
for (int i = 0; i < 4; i++)
{
vector<int> bucket[256];
nq = 1;
for(int j = 1; j <= n; j++)
bucket[(v[j] >> 8*i) & 255].push_back(v[j]);
for (int j = 0; j < 256; j++)
{
for (int k = 0; k < bucket[j].size(); k++)
v[nq++] = bucket[j][k];
bucket[j].clear();
}
}
for (int i = 2; i <= n; i++)
{
printf("%d ", v[i]);
if(v[i] < v[i-1])
cerr << "ERROR";
}
/*for (int i = 1; i <= n; i += 10)
{
printf("%d ", v[i]);
}*/
}
int main()
{
freopen("radixsort.in", "r", stdin);
freopen("radixsort.out", "w", stdout);
citire();
sol();
return 0;
}