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