Cod sursa(job #1193323)

Utilizator ZenusTudor Costin Razvan Zenus Data 31 mai 2014 14:24:39
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#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;
}