Kazimirko

Основы С++ / Тема 3 / Урок 4. Меняем размер вектора / Задача 1, Вариант 2(с контролем вывода)

Mar 2nd, 2021 (edited)
449
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.87 KB | None | 0 0
  1. /*
  2. Основы С++ / Тема 3 / Урок 4. Меняем размер вектора / Задача 1, Вариант 2(с контролем вывода)
  3.  
  4. Программа рабочая. В программу я вставил строки, выводящие состояние очереди.
  5. Но, увы... Программа не проходит тест от Яндекса!
  6. Программа проверки сообщает, что нарушена логика выполнения программы.
  7. Ну что тут скажешь...
  8. В тексте задания есть такое предложение: "Для реализации WORRY_COUNT понадобится честный подсчёт указанного числа."
  9. Не знаю, какую "честность" имеет в виду автор задания... Я постарался сделать этот подсчёт, более простым.
  10.  
  11. ЗАДАНИЕ
  12. Люди стоят в очереди, но никогда не уходят из её начала, зато могут приходить в конец и уходить оттуда.
  13. Также некоторые могут начинать и прекращать беспокоиться из-за того, что очередь не продвигается.
  14.  
  15. Реализуйте обработку следующих операций над очередью:
  16. WORRY i:     пометить i-го человека с начала очереди (в нумерации с 0), как беспокоящегося (true);
  17. QUIET i:     пометить i-го человека (в нумерации с 0), как успокоившегося (false);
  18. COME  k:     добавить k спокойных (false) человек в конец очереди;
  19. COME -k:     убрать k человек из конца очереди;
  20. WORRY_COUNT: узнать количество беспокоящихся (true) людей в очереди.
  21.  
  22. Изначально очередь пуста.
  23. Реализовать операции WORRY, QUIET и COME позволят простые действия с вектором.
  24. Для реализации WORRY_COUNT понадобится честный (в чём честность-то!?) подсчёт указанного числа.
  25.  
  26. ФОРМАТ ВВОДА
  27. На вход программе подаётся количество операций Q, затем описания операций.
  28. Для каждой операции WORRY i и QUIET i гарантируется, что человек с номером i существует в очереди на момент операции.
  29. Для каждой операции COME -k гарантируется, что k не больше текущего размера очереди.
  30. Все указанные гарантии действительно справедливы для всех запросов. Проверять их не нужно, просто пишите программу, считая, что входные данные корректны.
  31.  
  32. ФОРМАТ ВЫВОДА
  33. Для каждой операции WORRY_COUNT выведите одно целое число — количество беспокоящихся (true) людей в очереди.
  34.  
  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. 0
  82. COME 5
  83. 00000
  84. WORRY 1
  85. 10000
  86. WORRY 4
  87. 10010
  88. COME -2
  89. 100
  90. WORRY_COUNT
  91. 100
  92. 1
  93. COME 3
  94. 100000
  95. WORRY 3
  96. 101000
  97. WORRY_COUNT
  98. 101000
  99. 2
  100.  
  101. */
  102.  
  103. #include <iostream>
  104. #include <string>
  105. #include <vector>
  106.  
  107. using namespace std;
  108.  
  109. int main()
  110. {
  111.  
  112.   int q;              // количество операций Q
  113.   cin >> q; // вводим количество операций Q
  114.   vector<bool> queue; // очередь из людей по состоянию психики, как массив
  115.   int arg;            // аргумент, необходимый некоторым командам
  116.  
  117.   for (int i = 0; i < q; ++i)
  118.   {
  119.     string operation_code; // операция
  120.     cin >> operation_code; // вводим код операции
  121.  
  122.     // узнаем количество беспокоящихся людей в очереди
  123.     if (operation_code == "WORRY_COUNT"s)
  124.     {
  125.       int worry_count = 0;
  126.       for (bool status : queue)
  127.       {
  128.         if (status)
  129.         {
  130.           ++worry_count;
  131.         }
  132.       }
  133.       for (int people : queue)
  134.         cout << people; //выводим очередь
  135.  
  136.       cout << endl;
  137.       cout << worry_count << endl; //выводим количество беспокойных людей
  138.     }
  139.     else
  140.     {
  141.       // помечаем
  142.       if (operation_code == "WORRY"s)
  143.       {
  144.         cin >> arg;
  145.         queue[arg - 1] = true;
  146.        
  147.         for (int people : queue)
  148.           cout << people; //выводим очередь
  149.  
  150.         cout << endl;
  151.       }
  152.  
  153.       if (operation_code == "QUIET"s)
  154.       {
  155.         cin >> arg;
  156.         queue[arg - 1] = false;
  157.        
  158.         for (int people : queue)
  159.           cout << people; //выводим количество  людей
  160.  
  161.         cout << endl;
  162.       }
  163.  
  164.       if (operation_code == "COME"s)
  165.       {
  166.         cin >> arg;
  167.         queue.resize(queue.size() + arg, false);
  168.        
  169.         for (int people : queue)
  170.           cout << people; //выводим очередь
  171.  
  172.         cout << endl;
  173.       }
  174.     }
  175.   }
  176. }
  177.  
  178.  
Add Comment
Please, Sign In to add comment