Pagini recente » Cod sursa (job #993730) | Cod sursa (job #1105185) | Cod sursa (job #1091652) | Cod sursa (job #385351) | Cod sursa (job #1112334)
#include <fstream>
#include <cstring>
using namespace std;
const char InFile[]="radixsort.in";
const char OutFile[]="radixsort.out";
const int MaxN=10111000;
const int LogRadix=8;
const int Steps=32/LogRadix;
const int Radix=1<<LogRadix;
ifstream fin(InFile);
ofstream fout(OutFile);
int N,A,B,C,V[MaxN],Buffer[MaxN],F[Radix];
int main()
{
fin>>N>>A>>B>>C;
fin.close();
V[1]=B;
for(register int i=2;i<=N;++i)
{
V[i]=(1LL*A*V[i-1]+1LL*B)%C;
}
int mask=Radix-1;
int p=0;
for(register int step=1;step<=Steps;++step)
{
for(register int i=1;i<=N;++i)
{
++F[(V[i]&mask)>>p];
}
for(register int i=1;i<Radix;++i)
{
F[i]+=F[i-1];
}
for(register int i=N;i>0;--i)
{
Buffer[F[(V[i]&mask)>>p]--]=V[i];
}
memset(F,0,sizeof(F));
for(register int i=1;i<=N;++i)
{
V[i]=Buffer[i];
}
p+=LogRadix;
mask<<=LogRadix;
}
for(register int i=1;i<=N;i+=10)
{
fout<<V[i]<<" ";
}
fout.close();
return 0;
}