Pagini recente » Cod sursa (job #3151915) | Cod sursa (job #1530352) | Cod sursa (job #820708) | Cod sursa (job #827100) | Cod sursa (job #3198795)
#include <fstream>
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
const int N = 1e7 + 5;
int n, a, b, c, maxi, v[N];
int getcif(int x, int cif) {
return x / cif % 10;
}
void countsort(int cif) {
int fr[10], nou[n+5];
for(int i=0; i<=9; i++)
fr[i] = 0;
for(int i=1; i<=n; i++)
fr[getcif(v[i], cif)]++;
for(int i=1; i<=9; i++)
fr[i] += fr[i-1];
for(int i=n; i>=1; i--) {
nou[fr[getcif(v[i], cif)]] = v[i];
fr[getcif(v[i], cif)]--;
}
for(int i=1; i<=n; i++)
v[i] = nou[i];
}
void radix() {
long long cnt = 1;
while(cnt <= maxi) {
countsort(cnt);
cnt *= 10;
}
}
int main()
{
in >> n >> a >> b >> c;
v[1] = b % c;
maxi = v[1];
for(int i=2; i<=n; i++) {
v[i] = (1LL * a * v[i-1] + b) % c;
maxi = max(maxi, v[i]);
}
radix();
for(int i=1; i<=n; i+=10)
out << v[i] << ' ';
return 0;
}