DilyaraL

task5.1

Dec 2nd, 2021
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. void qsortRecursive2(int** mas, int size) {
  2. //Указатели в начало и в конец массива
  3. int i = 0;
  4. int j = size - 1;
  5.  
  6. //Центральный элемент массива
  7. int mid = mas[size / 2][1];
  8.  
  9. //Делим массив
  10. do {
  11. //Пробегаем элементы, ищем те, которые нужно перекинуть в другую часть
  12. //В левой части массива пропускаем(оставляем на месте) элементы, которые меньше центрального
  13. while (mas[i][1] < mid) {
  14. i++;
  15. }
  16. //В правой части пропускаем элементы, которые больше центрального
  17. while (mas[j][1] > mid) {
  18. j--;
  19. }
  20.  
  21. //Меняем элементы местами
  22. if (i <= j) {
  23. int tmp = mas[i][1];
  24. mas[i][1] = mas[j][1];
  25. mas[j][1] = tmp;
  26. tmp = mas[i][0];
  27. mas[i][0] = mas[j][0];
  28. mas[j][0] = tmp;
  29. i++;
  30. j--;
  31. }
  32. } while (i <= j);
  33.  
  34.  
  35. //Рекурсивные вызовы, если осталось, что сортировать
  36. if (j > 0) {
  37. //"Левый кусок"
  38. qsortRecursive2(mas, j + 1);
  39. }
  40. if (i < size) {
  41. //"Првый кусок"
  42. qsortRecursive2(&mas[i], size - i);
  43. }
  44. }
  45. void task5_1()
  46. {
  47. int n,k;
  48. cin >> n;
  49. cin >> k;
  50. int** ar = new int*[n];
  51. for (size_t i = 0; i < n; i++)
  52. {
  53. ar[i] = new int[2];
  54. }
  55. for (int i = 0; i < n; i++)
  56. {
  57. ar[i][0] = rand() % 365 + 1;
  58. ar[i][1]= (ar[i][0]+ rand() % 40 + 1)% 365;
  59. }
  60.  
  61. // показывает, что ввели
  62. for (size_t i = 0; i < n; i++)
  63. {
  64. for (size_t j = 0; j < 2; j++)
  65. {
  66. cout << ar[i][j] << " ";
  67. }
  68. cout << endl;
  69. }
  70. cout << endl;
  71. qsortRecursive2(ar, n);
  72. // показывает, отсортированный массив
  73. for (size_t i = 0; i < n; i++)
  74. {
  75. for (size_t j = 0; j < 2; j++)
  76. {
  77. cout << ar[i][j] << " ";
  78. }
  79. cout << endl;
  80. }
  81. cout << endl;
  82. int j = 0;
  83. bool flag = true;
  84. for (size_t i = k; (i < n)&flag; i++)
  85. {
  86. if (ar[i][0] > ar[j][1])// если дата выезда 1 меньше(раньше), чем дата въезда 2, то 2 можно принять
  87. {
  88. //старые уезжают, новые приезжают
  89. j++;
  90. }
  91. else
  92. {
  93. flag = false;
  94. }
  95. }
  96.  
  97. cout << endl;
  98. if (!flag)
  99. cout << "Unfortunately, we will not be able to settle everyone";
  100. else cout << "We have enough rooms";
  101. }
  102.  
Advertisement
Add Comment
Please, Sign In to add comment