Advertisement
Kazimirko

Основы С++ / Тема 3 / Урок 4. Меняем размер вектора / Задача 1

Mar 2nd, 2021 (edited)
1,702
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.69 KB | None | 0 0
  1. /*
  2. Основы С++ / Тема 3 / Урок 4. Меняем размер вектора / Задача 1
  3.  
  4. Программа рабочая.
  5. Но, увы... Программа не проходит тест от Яндекса!
  6. Программа проверки сообщает, что нарушена логика выполнения программы.
  7. Ну что тут скажешь...
  8. В тексте задания есть такое предложение: "Для реализации WORRY_COUNT понадобится честный подсчёт указанного числа."
  9. Не знаю, какую "честность" имеет в виду автор задания... Я постарался сделать этот подсчёт, более простым.
  10. Ниже находится текст задания, с моими пометками (пояснениями).
  11.  
  12. ЗАДАНИЕ
  13. Люди стоят в очереди, но никогда не уходят из её начала, зато могут приходить в конец и уходить оттуда.
  14. Также некоторые могут начинать и прекращать беспокоиться из-за того, что очередь не продвигается.
  15.  
  16. Реализуйте обработку следующих операций над очередью:
  17. WORRY i:    пометить i-го человека с начала очереди (в нумерации с 0), как беспокоящегося (true);
  18. QUIET i:    пометить i-го человека (в нумерации с 0), как успокоившегося (false);
  19. COME  k:    добавить k спокойных (false) человек в конец очереди;
  20. COME -k:    убрать k человек из конца очереди;
  21. WORRY_COUNT: узнать количество беспокоящихся (true) людей в очереди.
  22.  
  23. Изначально очередь пуста.
  24. Реализовать операции WORRY, QUIET и COME позволят простые действия с вектором.
  25. Для реализации WORRY_COUNT понадобится честный (в чём честность-то!?) подсчёт указанного числа.
  26.  
  27. ФОРМАТ ВВОДА
  28. На вход программе подаётся количество операций Q, затем описания операций.
  29. Для каждой операции WORRY i и QUIET i гарантируется, что человек с номером i существует в очереди на момент операции.
  30. Для каждой операции COME -k гарантируется, что k не больше текущего размера очереди.
  31. Все указанные гарантии действительно справедливы для всех запросов. Проверять их не нужно, просто пишите программу, считая, что входные данные корректны.
  32.  
  33. ФОРМАТ ВЫВОДА
  34. Для каждой операции WORRY_COUNT выведите одно целое число — количество беспокоящихся (true) людей в очереди.
  35.  
  36. Пример ввода
  37. 8            // количество операций: 8
  38. COME 5       // 1-я команда: добавить 5 спокойных человек в конец очереди
  39. WORRY 1      // 2-я команда: пометить первого человека с начала очереди (в нумерации с 0), как беспокоящегося
  40. WORRY 4      // 3-я команда: пометить четвёртого человека с начала очереди (в нумерации с 0), как беспокоящегося
  41. COME -2      // 4-я команда: убрать 2-х человек из конца очереди
  42. WORRY_COUNT  // 5-я команда: узнать количество беспокоящихся людей в очереди
  43. COME 3       // 6-я команда: добавить 3-х спокойных человека в конец очереди
  44. WORRY 3      // 7-я команда: пометить третьего человека с начала очереди (в нумерации с 0), как беспокоящегося
  45. WORRY_COUNT  // 8-я команда: узнать количество беспокоящихся людей в очереди
  46.  
  47. Пример вывода
  48. 1
  49. 2
  50.  
  51. vector<bool> — отличный способ хранения информации о людях. Беспокоится — true, не беспокоится — false.
  52. При обработке запроса WORRY_COUNT перед вычислением ответа проинициализируйте соответствующую переменную нулём.
  53. Используйте метод resize при обработке запроса COME. Отдельно обрабатывать случаи k и -k не нужно: resize всё сделает за вас.
  54.  
  55. -------------------------------------------------------------------------
  56. | №   |  КОМАНДА     |              НУМЕРАЦИЯ В МАССИВЕ             |ВЫВОД|
  57. | ПП|           |-----------------------------------------------|     |
  58. |   |             |   1   |   2   |   3   |   4   |   5   |   6   |     |
  59. |   |             |-------|-------|-------|-------|-------|-------|     |
  60. |   |             |   0   |   1   |   2   |   3   |   4   |   5   |     |
  61. -------------------------------------------------------------------------
  62. | 1 | COME 5      | false | false | false | false | false |       |     |
  63. -------------------------------------------------------------------------
  64. | 2 | WORRY 1     | true  | false | false | false | false |       |     |
  65. -------------------------------------------------------------------------
  66. | 3 | WORRY 4     | true  | false | false | true  | false |       |     |
  67. -------------------------------------------------------------------------
  68. | 4 | COME -2     | true  | false | false |       |       |       |     |
  69. -------------------------------------------------------------------------
  70. | 5 | WORRY_COUNT | true  | false | false |       |       |       |  1  |
  71. -------------------------------------------------------------------------
  72. | 6 | COME 3      | true  | false | false | false | false | false |     |
  73. -------------------------------------------------------------------------
  74. | 7 | WORRY 3     | true  | false | true  | false | false | false |     |
  75. -------------------------------------------------------------------------
  76. | 8 | WORRY_COUNT | true  | false | true  | false | false | false |  2  |
  77. -------------------------------------------------------------------------
  78.  
  79. Вывод моей программы:
  80. 8
  81. COME 5
  82. WORRY 1
  83. WORRY 4
  84. COME -2
  85. WORRY_COUNT
  86. 1
  87. COME 3
  88. WORRY 3
  89. WORRY_COUNT
  90. 2
  91.  
  92. */
  93.  
  94. #include <iostream>
  95. #include <string>
  96. #include <vector>
  97.  
  98. using namespace std;
  99.  
  100. int main()
  101. {
  102.   int q;
  103.   cin >> q;
  104.   vector<bool> queue;
  105.   int arg;
  106.  
  107.   for (int i = 0; i < q; ++i)
  108.   {
  109.     string operation_code;
  110.     cin >> operation_code;
  111.  
  112.     if (operation_code == "WORRY_COUNT"s)
  113.     {
  114.       int worry_count = 0;
  115.       for (int i = 0; i < queue.size(); ++i)
  116.       {
  117.         bool val = queue[i];
  118.         if (val == true)
  119.         {
  120.           ++worry_count;
  121.         }
  122.       }
  123.       cout << worry_count << endl;
  124.     }
  125.     else
  126.     {
  127.  
  128.       cin >> arg;
  129.  
  130.       if (operation_code == "COME"s)
  131.       {
  132.         queue.resize(queue.size() + arg, false);
  133.       }
  134.  
  135.       if (operation_code == "WORRY"s)
  136.       {
  137.         queue[arg - 1] = true;
  138.       }
  139.  
  140.       if (operation_code == "QUIET"s)
  141.       {
  142.         queue[arg - 1] = false;
  143.       }
  144.     }
  145.   }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement