Pagini recente » Cod sursa (job #1434750) | Cod sursa (job #1926207) | Cod sursa (job #3241430) | Cod sursa (job #1030134) | Cod sursa (job #2388925)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
vector < long long > v;
int N,A,B,C;
long long val;
int maxim;
int range=10;
void read()
{
fin>>N>>A>>B>>C;
v.push_back(-1);
v.push_back(B);
maxim=B;
for(int i=2;i<=N;++i)
{
val=(1LL*A*v[i-1] + 1LL*B)%C;
//fin>>val;
if(val>maxim) maxim=val;
v.push_back(val);
}
}
void count(int place)
{
int i;
int frecv[10]={0};
int out[N];
for(int i=1;i<=N;++i)
frecv[ (v[i]/place) % range ]++;
for(int i=1;i<range;++i)
frecv[i]+=frecv[i-1];
for(int i=N;i>=1;--i)
{
out[ frecv[ (v[i]/place) % range] ] = v[i];
frecv[ (v[i]/place) % range]--;
}
for(int i=1;i<=N;++i)
v[i]=out[i];
}
void radix()
{
int p=1;
while(maxim)
{
count(p);
maxim/=10;
p*=10;
}
}
int main()
{
read();
radix();
int x=1;
//for(int i=1;i<=N;++i) fout<<v[i]<<" ";
while(x<=N)
{
fout<<v[x]<<" ";
x+=10;
}
return 0;
}