Cod sursa(job #1700406)

Utilizator cella.florescuCella Florescu cella.florescu Data 10 mai 2016 14:30:17
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
#include <queue>
#define MAXN 10000000
#define RADIX 256
#define getbyte(x) (((x)>>byte)&(RADIX-1))

using namespace std;

unsigned int v[MAXN];

queue <unsigned int> lst[RADIX];

inline void radix(int byte, int n){
  for(int i=0; i<n; i++)
    lst[getbyte(v[i])].push(v[i]);
  int nr=0;
  for(int i=0; i<RADIX; i++)
    while(lst[i].empty()==0){
      v[nr++]=lst[i].front();
      lst[i].pop();
    }
}

int main()
{
    FILE *fin, *fout;
    int n, i, a, b, c;
    fin=fopen("radixsort.in", "r");
    fscanf(fin, "%d%d%d%d", &n, &a, &b, &c);
    fclose(fin);
    v[0]=b;
    for(i=1; i<n; i++)
      v[i]=(1LL*a*v[i-1]+b)%c;
    for(i=0; i<32; i+=8)
      radix(i, n);
    fout=fopen("radixsort.out", "w");
    for(i=0; i<n; i+=10)
      fprintf(fout, "%d ", v[i]);
    fprintf(fout, "\n");
    return 0;
}