Pagini recente » Cod sursa (job #2367078) | Cod sursa (job #2960464) | Cod sursa (job #1433564) | Cod sursa (job #2959919) | Cod sursa (job #2540190)
#include <fstream>
#include <algorithm>
using namespace std;
int n, a, b, c, i, v[10000001], w[10000001], f[10], maxim, cifre, z;
ifstream fin ("radix.in");
ofstream fout("radix.out");
int main () {
fin>>n>>a>>b>>c;
v[1] = b;
for (i=2;i<=n;i++) {
v[i] = (a*1LL*v[i-1] + b)%c;
if (v[i] > maxim)
maxim = v[i];
}
cifre = 0;
while (maxim) {
cifre++;
maxim /= 10;
}
z = 1;
for (c = 1; c<=cifre; c++) {
/// sortez numerele dupa a c-a cifra
/// cand sortez dupa cifra c am grija ca la egalitate sa le pastrez in aceeasi
/// ordine in care erau la pasul anterior (la sortarea dupa cifra anterioara).
for (i=0;i<=9;i++)
f[i] = 0;
for (i=1;i<=n;i++)
f[ v[i] / z % 10]++;
for (i=1;i<=9;i++)
f[i] += f[i-1];
/// f[i] = ultima pozitie ocupata de un numar cu cifra c egala cu cel mult i
/// dupa ce termin sortarea dupa cifra c
for (i=n;i>=1;i--)
w[ f[ v[i] / z % 10 ]-- ] = v[i];
for (i=1;i<=n;i++)
v[i] = w[i];
z = z*10;
}
for (i=1;i<=n;i+=10)
fout<<v[i]<<" ";
return 0;
}