Cod sursa(job #1714612)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 8 iunie 2016 20:49:38
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#define  MAGIC 0 ///Tab-ul de 2 ma ameteste...
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 10000005;
const int BYTE = 256;

int n;
int        v[NMAX];
queue<int> q[BYTE];

inline int mask(int arg, int step) {
  return int( (arg>>--step*8) & (BYTE-1LL) );
}

void rsort(void) {
    for(int i=1; i<=4; ++i) {
        for(int j=1; j<=n; ++j)
            q[mask(v[j], i)].push(v[j]);
        for(int j=0, buff=0; j<BYTE; ++j)
            while(!q[j].empty())
                v[++buff] = q[j].front(),
                q[j].pop();
    }
}

int main(void) {
  FILE *fi = fopen("radixsort.in", "r");
  FILE *fo = fopen("radixsort.out", "w");
  int a, b, c;

  fscanf(fi,"%d %d %d %d",&n,&a,&b,&c);

  v[1] = b;
  for(int i=2; i<=n; ++i)
    v[i] = (1LL * a * v[i-1] + b) % c;

  rsort();

  for(int i=1; i<=n; i+=10)
    fprintf(fo,"%lld ",v[i]);
  fprintf(fo,"\n");

  fclose(fi);
  fclose(fo);
  return MAGIC;
}