Cod sursa(job #3297525)

Utilizator Arhiva_Educationala_2Arhiva Educationala doi Arhiva_Educationala_2 Data 22 mai 2025 19:11:40
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

const int BITS = 16;
const int FULL = (1 << BITS) - 1;

int main() {
  FILE *fin = fopen( "radixsort.in", "r" );
  FILE *fout = fopen( "radixsort.out", "w" );

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

  std::vector<int> v(1, b);
  for( int i = 1; i < n; i++ )
    v.push_back( (a * (long long)v.back() + b) % c );

  for( int i = 2; i--; ){
    std::vector<std::vector<int>> cacat(1 << BITS);
    for( int x : v )
      cacat[(x >> (i * BITS)) & (FULL)].push_back( x );

    v.clear();
    for( auto &vec : cacat )
      for( int x : vec )
        v.push_back( x );
  }
  
  for( int i = 0; i < n; i += 10 )
    fprintf( fout, "%d ", v[i] );

  fclose( fin );
  fclose( fout );
  return 0;
}