Cod sursa(job #2885755)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 6 aprilie 2022 15:24:32
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

const int bits = 15;
int n, cnt, key, i;
int A, B, C;
int v[10000001];
vector <int> b[1 << bits];

int main()
{
  FILE *fin, *fout;
  fin = fopen ("radixsort.in", "r");
  fscanf (fin, "%d%d%d%d", &n, &A, &B, &C);
  fclose (fin);
  v[1] = B;
  for (i = 2; i <= n; ++i)
    v[i] = (1LL * A * v[i - 1] + B) % C;
  for (key = 0; key < 31; key += bits) {
    for (i = 1; i <= n; ++i)
      b[(v[i] >> key) & ((1 << bits) - 1)].emplace_back(v[i]);
    cnt = 0;
    for (i = 0; i <= ((1 << bits) - 1) && cnt < n; ++i) {
        for (int j = 0; j < (int)b[i].size(); j++)
            v[++cnt] = b[i][j];
        b[i].clear();
    }
  }
  fout = fopen ("radixsort.out", "w");
  for (i = 1; i <= n; i = i + 10)
    fprintf (fout, "%d ", v[i]);
  fclose (fout);
  return 0;
}