Pagini recente » Monitorul de evaluare | Cod sursa (job #116431) | Cod sursa (job #321724) | Cod sursa (job #2866798) | Cod sursa (job #2201575)
#include <stdio.h>
int n,m,a,b,c;
int v[10000005],x[65600],aux[10000005];
int main()
{
int i,j,c1;
unsigned long long crt;
FILE *f,*g;
f=fopen("radixsort.in","r");
g=fopen("radixsort.out","w");
fscanf(f,"%d%d%d%d",&n,&a,&b,&c);
v[1]=b;
m=1;
crt=b;
for(i=2;i<=n;i++)
{
crt=(crt*a+b)%c;
v[i]=crt;
}
c1=1<<16;
// for(i=1;i<=n;i++)
// printf("%d ",v[i]);
for(i=1;i<=n;i++)
x[v[i]%c1]++;
for(i=1;i<=c1;i++)
x[i]+=x[i-1];
for(i=n;i>=1;i--)
{
j=v[i]%c1;
aux[x[j]]=v[i];
x[j]--;
}
for(i=0;i<=c1;i++)
x[i]=0;
for(i=1;i<=n;i++)
x[aux[i]/c1]++;
for(i=1;i<=c1;i++)
x[i]+=x[i-1];
for(i=n;i>=1;i--)
{
j=aux[i]/c1;
v[x[j]]=aux[i];
x[j]--;
}
for(i=1;i<=n;i+=10)
fprintf(g,"%d ",v[i]);
fclose(f);
fclose(g);
}