Cod sursa(job #2609435)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 2 mai 2020 17:17:51
Problema Radix Sort Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>

using namespace std;
int v[2][10000001], nr[65536], poz[65536];
ifstream cin ( "radixsort.in" );
ofstream cout ( "radixsort.out" );
int main() {
  int n, a, b, c, i, k, j, cif, ia, nsh;
  cin >> n >> a >> b >> c;
  v[0][0] = b;
  for( i = 1; i < n; i++ ) {
    v[0][i] = ( 1LL * a * v[0][i - 1] + b ) % c;
  }
  for (k = 0; k < 2; k++) {
    ia = 1 - k;
    nsh = k * 16;
    for (j = 0; j < 65536; j++) {
      nr[j] = 0;
    }
    for (i = 0; i < n; i++) {
      nr[(v[k][i] >> nsh) & 65535]++;
    }
    poz[0] = 0;
    for (j = 1; j < 65536; j++) {
      poz[j] = poz[j-1] + nr[j-1];
    }
    for (i = 0; i < n; i++) {
      cif = (v[k][i] >> nsh) & 65535;
      v[ia][poz[cif]++] = v[k][i];
    }
  }
  for ( i = 0; i < n; i += 10 )
    cout << v[0][i] << " ";
  return 0;
}