Pagini recente » Istoria paginii runda/sim_ix_21_01_2021/clasament | Monitorul de evaluare | Istoria paginii runda/sin/clasament | Cod sursa (job #1799875) | Cod sursa (job #2309733)
#include <bits/stdc++.h>
#define NMAX 10000000
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
int N, A, B, C;
long long p;
int v[NMAX], out[NMAX];
void counting_sort(int v[], long long p);
int main()
{
/// 5 cifre 100000
fin>>N>>A>>B>>C;
v[1]=B;
for(int i=2; i<=N; i++) v[i]=1LL*(v[i-1]*A+B)%C;
p=100000;
counting_sort(v, p);
p*=p;
counting_sort(v, p);
for(int i=1; i<=N; i+=10) fout<<v[i]<<' ';
return 0;
}
void counting_sort(int v[], long long p)
{
int poz[100001];
for(int i=0; i<=100000; i++) poz[i]=0;
for(int i=1; i<=N; i++)
{
int x=(v[i]%p)/(p/100000);
poz[x]++;
}
int sumpart=0;
for(int i=0; i<=100000; i++)
{
sumpart+=poz[i];
poz[i]=sumpart;
}
for(int i=N; i; i--)
{
int x=(v[i]%p)/(p/100000);
out[poz[x]]=v[i];
poz[x]--;
}
for(int i=1; i<=N; i++) v[i]=out[i];
}