Cod sursa(job #2696726)

Utilizator lucametehauDart Monkey lucametehau Data 16 ianuarie 2021 13:53:43
Problema Radix Sort Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define x first
#define y second
#define ld long double
#define ll long long
#define ull unsigned long long
#define us unsigned short
#define lsb(x) ((x) & (-(x)))

using namespace std;

ifstream in ("radixsort.in");
ofstream out ("radixsort.out");

int n, m, a, b, c;
ll k;

int v[10000005], w[10000005];
int cnt[256];

void radix(int n, int v[], int w[], int b) {
  memset(cnt, 0, sizeof(cnt));
  for(int i = 1; i <= n; i++)
    cnt[v[i] >> b & 255]++;
  for(int i = 255; i > 0; i--)
    cnt[i] = cnt[i - 1];
  cnt[0] = 0;
  for(int i = 1; i <= 255; i++)
    cnt[i] += cnt[i - 1];
  for(int i = 1; i <= n; i++)
    w[++cnt[v[i] >> b & 255]] = v[i];
}

int main() {
  in >> n >> a >> b >> c;
  for(int i = 1; i <= n; i++)
    v[i] = (1LL * a * v[i - 1] + b) % c;
  radix(n, v, w, 0);
  radix(n, w, v, 8);
  radix(n, v, w, 16);
  radix(n, w, v, 24);
  for(int i = 1; i <= n; i += 10)
    out << v[i] << " ";
  return 0;
}