Pagini recente » Cod sursa (job #2780200) | Cod sursa (job #3037665) | Cod sursa (job #1526272) | Cod sursa (job #1948850) | Cod sursa (job #1193323)
#include <cstdio>
#include <cstring>
using namespace std;
#define mainMask 8
#define NMAX 10000005
int N,A,C,i;
int HA[1<<mainMask];
int H[NMAX],V[NMAX];
void Solve(int P)
{
memset(HA,0,sizeof(HA));
memset(H,0,sizeof(H));
int mask=(1<<mainMask)-1;
int i;
for (i=1;i<=N;++i)
++HA[ ( V[i] & ( mask<<P ) ) >>P ];
for (i=1;i<=mask;++i)
HA[i]+=HA[i-1];
for (i=mask;i>=1;--i)
HA[i]=HA[i-1];
for (i=1 , HA[0]=0;i<=N;++i)
H[ ++HA [ ( V[i] & ( mask<<P ) ) >>P ] ] =V[i];
for (i=1;i<=N;++i)
V[i]=H[i];
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d%d%d%d",&N,&A,&V[1],&C);
for (i=2;i<=N;++i)
V[i]=(1LL*A*V[i-1]+V[1])%C;
for (i=0;i<32;i+=mainMask)
Solve(i);
for (i=1;i<=N;i+=10) printf("%d ",V[i]);
printf("\n");
return 0;
}