Pagini recente » Cod sursa (job #1523033) | Cod sursa (job #1046274) | Cod sursa (job #77245) | Cod sursa (job #1256415) | Cod sursa (job #1959835)
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#define BucketSize 16
#define MaxN 10000005
using namespace std;
FILE*IN,*OUT;
int N,B,A,C,v[MaxN],Bucket[1<<BucketSize],aux[MaxN];
void Radix(int *a,int Start,int End)
{
for(int p=0;p<32;p+=BucketSize)
{
memset(Bucket,0,sizeof Bucket);
for(int i=Start;i<=End;i++)
Bucket[(a[i]>>p)&((1<<BucketSize)-1)]++;
for(int i=1;i<1<<BucketSize;i++)
Bucket[i]+=Bucket[i-1];
for(int i=Start;i<=End;i++)
aux[Bucket[(a[i]>>p)&((1<<BucketSize)-1)]--]=a[i];
memcpy(v,aux,sizeof aux);
}
}
int main()
{
IN=fopen("radixsort.in","r");
OUT=fopen("radixsort.out","w");
fscanf(IN,"%d%d%d%d",&N,&A,&B,&C);
v[1]=B%C;
for(int i=1;i<=N;i++)
v[i]=(A*v[i-1]+B)%C;
Radix(v,1,N);
for(int i=N;i>0;i-=10)
fprintf(OUT,"%d ",v[i]);
return 0;
}