Cod sursa(job #1092021)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 26 ianuarie 2014 14:36:48
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<cstdio>
using namespace std;
const int NMAX = 10000005;
const int MASK = (1<<8)-1;
int N,A,B,C,V[NMAX],W[NMAX],i,j,k,shift,Buckets[MASK+5];
int main()
{
	freopen("radixsort.in","r",stdin);
	freopen("radixsort.out","w",stdout);
	scanf("%d%d%d%d",&N,&A,&B,&C);
	for(V[1]=B,i=2;i<=N;i++) V[i]=(1LL*A*V[i-1]+B)%C;
	for(i=0,shift=0;i<4;i++,shift+=8)
	{
	    for(j=1;j<=N;j++)
        {
            k=(V[j]>>shift)&MASK;
            Buckets[k]++;
        }
        for(j=1;j<=MASK;j++)
            Buckets[j]+=Buckets[j-1];
        for(j=N;j;j--)
        {
            k=(V[j]>>shift)&MASK;
            W[Buckets[k]]=V[j];
            Buckets[k]--;
        }
        for(j=1;j<=N;j++) V[j]=W[j];
        for(j=0;j<=MASK;j++) Buckets[j]=0;
	}
	for(i=1;i<=N;i+=10) printf("%d ",V[i]);
	return 0;
}