Pagini recente » Cod sursa (job #1918857) | Cod sursa (job #788913) | Cod sursa (job #2864401) | Cod sursa (job #610444) | Cod sursa (job #1907870)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
long long v[10000001];
int nrcf(long long n)
{
int nr=0;
while(n)
{
nr++;
n/=10;
}
return nr;
}
struct nod{long long inf; nod *leg;};
nod a[10];
nod *in[10];
nod *sf[10];
void ad(int i, long long x)
{
if(!in[i])
{
nod *p=new nod;
p->inf=x;
p->leg=NULL;
in[i]=sf[i]=p;
}
else
{
nod *p=new nod;
p->inf=x;
p->leg=NULL;
sf[i]->leg=p;
sf[i]=p;
}
}
int main()
{long long n,a,b,c,i,x;
f>>n>>a>>b>>c;
v[1]=b;
int maxx=nrcf(c);
for(i=2;i<=n;i++)
v[i]=(a*v[i-1]+b)%c;
int M,C,j;
for(M=10,C=1,j=1;j<=maxx;j++,M*=10,C*=10)
{
for(i=1;i<=n;i++)
{
x=v[i]%M;
x/=C;
ad(x,v[i]);
}
n=0;
for(i=0;i<=9;i++)
if(sf[i])
{
nod *p=in[i];
sf[i]=in[i]=NULL;
while(p)
{
v[++n]=p->inf;
nod *q=p;
p=p->leg;
delete q;
}
}
}
for(i=1;i<=n;i+=10)
g<<v[i]<<' ';
return 0;
}