Cod sursa(job #1723328)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 30 iunie 2016 13:49:15
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#include <cstring>
#define MAXN 100000000
#define MAXBYTE 8
int v[MAXN+1],vf[1<<MAXBYTE],val[MAXN+1];
inline int get_bytes(int x,int k){
     return (x>>k)&((1<<MAXBYTE)-1);
}
int main(){
   FILE*fi,*fout;
   int i,n,j;
   long long a,b,c;
   fi=fopen("radixsort.in" ,"r");
   fout=fopen("radixsort.out" ,"w");
   fscanf(fi,"%d%lld%lld%lld" ,&n,&a,&b,&c);
   v[1]=b;
   for(i=2;i<=n;i++)
      v[i]=(a*v[i-1]+b)%c;
   for(i=0;i<4;i++){
       memset(vf,0,sizeof(vf));
       for(j=1;j<=n;j++)
         vf[get_bytes(v[j],MAXBYTE*i)]++;
       for(j=1;j<(1<<MAXBYTE);j++)
         vf[j]+=vf[j-1];
       for(j=n;j>0;j--){
          val[vf[get_bytes(v[j],MAXBYTE*i)]]=v[j];
          vf[get_bytes(v[j],MAXBYTE*i)]--;
       }
       for(j=1;j<=n;j++)
        v[j]=val[j];
   }
   for(i=1;i<=n;i+=10)
     fprintf(fout,"%d " ,v[i]);
   fclose(fi);
   fclose(fout);
   return 0;
}