Pagini recente » Cod sursa (job #2643908) | Cod sursa (job #2305998) | Cod sursa (job #1015947) | Cod sursa (job #2162013) | Cod sursa (job #2571407)
#include <bits/stdc++.h>
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
long long v[10000002], n, maxim, p = 1, t, a[1000 * 1000 * 10 + 2], caz;
long long A, B, C;
void countsort(long long);
int main()
{
f >> n >> A >> B >> C;
v[1] = B % C;
for (long long i = 2; i <= n; i++)
v[i] = (1ll * A * v[i - 1] % C + B) % C, maxim = max(maxim, v[i]);
t = log10(maxim);
for (long long y = 0; y <= t; y++)
countsort(p), p *= 10;
if (!caz)
for (long long i = 1; i <= n; i += 10)
g << v[i] << " ";
else
for (long long i = 1; i <= n; i += 10)
g << a[i] << " ";
return 0;
}
void countsort(long long m)
{
// g << m << ": ";
long long vec[11];
memset(vec, 0, sizeof vec);
if (!caz)
{
for (long long i = 1; i <= n; i++)
vec[(v[i] / m) % 10]++;
/*for (long long i = 0; i <= 9; i++)
g << vec[i] << " ";
g << endl;*/
for (long long i = 1; i <= 9; i++)
vec[i] += vec[i - 1];
for (long long i = n; i >= 1; i--)
a[vec[(v[i] / m) % 10]] = v[i], vec[(v[i] / m) % 10]--;
/* for (long long i = 1; i <= n; i++)
g << a[i] << " ";
// g << endl
// << endl;*/
}
else
{
for (long long i = 1; i <= n; i++)
vec[(a[i] / m) % 10]++;
/*for (long long i = 0; i <= 9; i++)
g << vec[i] << " ";
g << endl;*/
for (long long i = 1; i <= 9; i++)
vec[i] += vec[i - 1];
for (long long i = n; i >= 1; i--)
v[vec[(a[i] / m) % 10]] = a[i], vec[(a[i] / m) % 10]--;
/* for (long long i = 1; i <= n; i++)
g << v[i] << " ";
g << endl
<< endl;*/
}
caz ^= 1;
}