Advertisement
smatskevich

Seminar8

Nov 7th, 2022
1,064
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.22 KB | None | 0 0
  1. #include <algorithm>
  2. #include <ctime>
  3. #include <iostream>
  4. #include <optional>
  5. #include <random>
  6. #include <string>
  7.  
  8. const std::optional<int> GetSeedFromConfig() {
  9.   return {};
  10. }
  11.  
  12. int main1() {
  13.   int seed = 0;
  14.   auto seed_from_config = GetSeedFromConfig();
  15.   if (seed_from_config) {
  16.     seed = *seed_from_config;
  17.   } else {
  18.     seed = clock();
  19.   }
  20.   std::cout << seed;
  21.   srand(seed);
  22.   int n; std::cin >> n;
  23.   for (int i = 0; i < n; ++i) {
  24.     std::cout << rand() << " ";
  25.   }
  26.   return 0;
  27. }
  28.  
  29. int gen_random_in_segment(int a, int b, std::mt19937& gen) {
  30.   uint32_t rand = gen();
  31.   std::uniform_int_distribution<> distrib(a, b);
  32. //  return rand % (b - a + 1) + a;
  33.   return distrib(gen);
  34. }
  35.  
  36. int main2() {
  37.   int seed = clock();
  38.   std::mt19937 gen(seed);
  39.  
  40.   std::cout << gen_random_in_segment(6, 10, gen);
  41.   return 0;
  42. }
  43.  
  44. void CountingSort(std::vector<int>& v) {
  45.   if (v.empty()) return;
  46.   int v_max = *std::max_element(v.begin(), v.end());
  47.   std::vector<int> counts(v_max + 1);
  48.   for (int i = 0; i < v.size(); ++i)
  49.     ++counts[v[i]];
  50.   int j = 0;
  51.   for (int i = 0; i <= v_max; ++i) {
  52.     while (counts[i] != 0) {
  53.       v[j++] = i;
  54.       --counts[i];
  55.     }
  56.   }
  57. }
  58.  
  59. void CountingSort2(std::vector<int>& v) {
  60.   if (v.empty()) return;
  61.   int v_max = *std::max_element(v.begin(), v.end());
  62.   std::vector<int> counts(v_max + 1);
  63.   for (int i = 0; i < v.size(); ++i)
  64.     ++counts[v[i]];
  65.   for (int i = 1; i <= v_max; ++i)
  66.     counts[i] += counts[i - 1];
  67.   std::vector<int> result(v.size());
  68.   for (int i = v.size() - 1; i >= 0; --i)
  69.     result[--counts[v[i]]] = v[i];
  70.  
  71.   // std::swap(v, result);
  72.   v = std::move(result);
  73. }
  74.  
  75. int main3() {
  76.   try {
  77.     int n = 0;
  78.     std::cin >> n;
  79.     std::vector<int> v(n);
  80.     for (int &x: v) std::cin >> x;
  81.     CountingSort2(v);
  82.     for (int x: v) std::cout << x << " ";
  83.   } catch(std::exception& e) {
  84.     std::cerr << e.what() << std::endl;
  85.   }
  86.   return 0;
  87. }
  88.  
  89. // 255.255.255.0
  90. // 11111111.11111111.11111111.00000000
  91.  
  92. // r-ая четверка бит
  93. // r = 1
  94. // 0101010010111101
  95. //         1011
  96. // x             0101010010111101
  97. // x >> r * 4 =  0000010101001011
  98. // mask =        0000000000001111
  99. // mask & prev = 0000000000001011
  100. int Radix(int x, int r) {
  101.   const int mask = 0b1111;
  102.   return mask & (x >> r * 4);
  103. }
  104.  
  105. void LSDSort(std::vector<int>& v) {
  106.   int r = 0;
  107. //  for (int r = 0; r < 8; ++r) {
  108.     for (int x : v) {
  109.       std::cout << Radix(x, r);
  110.     }
  111. //  }
  112. }
  113.  
  114. int main4() {
  115.   int n = 0;
  116.   std::cin >> n;
  117.   std::vector<int> v(n);
  118.   for (int &x: v) std::cin >> x;
  119.   LSDSort(v);
  120.   for (int x: v) std::cout << x << " ";
  121.   return 0;
  122. }
  123.  
  124. int main() {
  125.   std::cout << sizeof(long) << std::endl;
  126.   std::cout << 045 << std::endl;
  127. }
  128.  
  129. void MSDSort(std::vector<std::string>& v, int l, int r) {
  130.   std::vector<int> counts(256);
  131.   for (int i = 0; i < v.size(); ++i) ++counts[v[i][3]];
  132.   for (int i = 1; i < 256; ++i) counts[i] += counts[i + 1];
  133.   std::vector<std::string> result;
  134.   for (int i = r - 1; i >= l; --i) result[--counts[v[i][3]]] = v[i];
  135.   // Сортируем не все группы – начинаем с 1ой.
  136.   for (int g = 1; g < 256; ++g) {
  137.     MSDSort(v, counts[g], counts[g + 1]); // Кроме последней
  138.   }
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement