vadimk772336

Untitled

Oct 8th, 2021 (edited)
680
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. void merge(int* array, int l, int mid, int r)
  6. {
  7.     int ls = 0, rs = 0;
  8.     int result[r - l + 1];
  9.  
  10.     while ((l + ls < mid + 1) && (mid + rs < r))
  11.     {
  12.         if (array[l + ls] < array[mid + rs + 1])
  13.         {
  14.             result[ls + rs] = array[l + ls];
  15.             ls++;
  16.         }
  17.         else
  18.         {
  19.             result[ls + rs] = array[mid + 1 + rs];
  20.             rs++;
  21.         }
  22.     }
  23.  
  24.     while (l + ls < mid + 1)
  25.     {
  26.         result[ls + rs] = array[l + ls];
  27.         ls++;
  28.     }
  29.  
  30.     while (mid + rs < r)
  31.     {
  32.         result[ls + rs] = array[mid + rs + 1];
  33.         rs++;
  34.     }
  35.  
  36.     for (int i = 0; i < ls + rs; ++i)
  37.         array[l + i] = result[i];
  38. }
  39.  
  40.  
  41. void mergeSort(int* array, int n, int size)
  42. {
  43.  
  44.  
  45.     for (int i = size; i < n; i *= 2) {
  46.  
  47.         for (int j = 0; j < n - i; j += 2 * i)
  48.         {
  49.             if (j + 2 * i - 1 > n) {
  50.                 merge(array, j, j + i - 1, n);
  51.             }
  52.             else {
  53.                 merge(array, j, j + i - 1, j + 2 * i - 1);
  54.             }
  55.         }
  56.     }
  57. }
  58.  
  59.  
  60. int VerifyDecimal(int value)
  61. {
  62.     int deg = 0;
  63.     int p = 1;
  64.    
  65.     while (value >  p) {
  66.         p *= 2;
  67.     }
  68.     return p;
  69. }
  70.  
  71. int main()
  72. {
  73.  
  74.     int arr[2000];
  75.     int result[2000];
  76.  
  77.     int count_tests;
  78.     int size, count_mas;
  79.     int arr_size;
  80.  
  81.     ifstream ifs("123.txt");
  82.     ifs >> count_tests;
  83.  
  84.     ofstream out("results.txt");
  85.  
  86.     for (int i = 0; i < count_tests; ++i)
  87.     {
  88.  
  89.         ifs >> count_mas;
  90.         ifs >> size;
  91.         int p = VerifyDecimal(count_mas);
  92.         int diff = p-count_mas;
  93.        
  94.         int arr_size = count_mas * size;
  95.         int arr[arr_size + diff];
  96.        
  97.        // arr_size = count_mas * size;
  98.        
  99.         for (int j = 0; j < arr_size; ++j)
  100.             ifs >> arr[j];
  101.  
  102.  
  103.         if (p > count_mas)
  104.             {
  105.                 for (int j = arr_size; j < arr_size + diff; ++j)
  106.                     arr[j] = 1100000000;
  107.                 mergeSort(arr, arr_size + diff, size);
  108.             }
  109.            
  110.         else
  111.             mergeSort(arr, arr_size, size);
  112.        
  113.        
  114.         std::cout << "answ \n";
  115.         for (int k = 0; k < arr_size; ++k)
  116.         {
  117.             out << arr[k] << ' ';
  118.             arr[k] = 0;
  119.         }
  120.         out << '\n';
  121.        
  122.  
  123.    
  124.     }
  125.     return 0;
  126. }
  127.  
Add Comment
Please, Sign In to add comment