Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Основы С++ / Тема 3 / Урок 4. Меняем размер вектора / Задача 1
- Программа рабочая.
- Но, увы... Программа не проходит тест от Яндекса!
- Программа проверки сообщает, что нарушена логика выполнения программы.
- Ну что тут скажешь...
- В тексте задания есть такое предложение: "Для реализации WORRY_COUNT понадобится честный подсчёт указанного числа."
- Не знаю, какую "честность" имеет в виду автор задания... Я постарался сделать этот подсчёт, более простым.
- Ниже находится текст задания, с моими пометками (пояснениями).
- ЗАДАНИЕ
- Люди стоят в очереди, но никогда не уходят из её начала, зато могут приходить в конец и уходить оттуда.
- Также некоторые могут начинать и прекращать беспокоиться из-за того, что очередь не продвигается.
- Реализуйте обработку следующих операций над очередью:
- WORRY i: пометить i-го человека с начала очереди (в нумерации с 0), как беспокоящегося (true);
- QUIET i: пометить i-го человека (в нумерации с 0), как успокоившегося (false);
- COME k: добавить k спокойных (false) человек в конец очереди;
- COME -k: убрать k человек из конца очереди;
- WORRY_COUNT: узнать количество беспокоящихся (true) людей в очереди.
- Изначально очередь пуста.
- Реализовать операции WORRY, QUIET и COME позволят простые действия с вектором.
- Для реализации WORRY_COUNT понадобится честный (в чём честность-то!?) подсчёт указанного числа.
- ФОРМАТ ВВОДА
- На вход программе подаётся количество операций Q, затем описания операций.
- Для каждой операции WORRY i и QUIET i гарантируется, что человек с номером i существует в очереди на момент операции.
- Для каждой операции COME -k гарантируется, что k не больше текущего размера очереди.
- Все указанные гарантии действительно справедливы для всех запросов. Проверять их не нужно, просто пишите программу, считая, что входные данные корректны.
- ФОРМАТ ВЫВОДА
- Для каждой операции WORRY_COUNT выведите одно целое число — количество беспокоящихся (true) людей в очереди.
- Пример ввода
- 8 // количество операций: 8
- COME 5 // 1-я команда: добавить 5 спокойных человек в конец очереди
- WORRY 1 // 2-я команда: пометить первого человека с начала очереди (в нумерации с 0), как беспокоящегося
- WORRY 4 // 3-я команда: пометить четвёртого человека с начала очереди (в нумерации с 0), как беспокоящегося
- COME -2 // 4-я команда: убрать 2-х человек из конца очереди
- WORRY_COUNT // 5-я команда: узнать количество беспокоящихся людей в очереди
- COME 3 // 6-я команда: добавить 3-х спокойных человека в конец очереди
- WORRY 3 // 7-я команда: пометить третьего человека с начала очереди (в нумерации с 0), как беспокоящегося
- WORRY_COUNT // 8-я команда: узнать количество беспокоящихся людей в очереди
- Пример вывода
- 1
- 2
- vector<bool> — отличный способ хранения информации о людях. Беспокоится — true, не беспокоится — false.
- При обработке запроса WORRY_COUNT перед вычислением ответа проинициализируйте соответствующую переменную нулём.
- Используйте метод resize при обработке запроса COME. Отдельно обрабатывать случаи k и -k не нужно: resize всё сделает за вас.
- -------------------------------------------------------------------------
- | № | КОМАНДА | НУМЕРАЦИЯ В МАССИВЕ |ВЫВОД|
- | ПП| |-----------------------------------------------| |
- | | | 1 | 2 | 3 | 4 | 5 | 6 | |
- | | |-------|-------|-------|-------|-------|-------| |
- | | | 0 | 1 | 2 | 3 | 4 | 5 | |
- -------------------------------------------------------------------------
- | 1 | COME 5 | false | false | false | false | false | | |
- -------------------------------------------------------------------------
- | 2 | WORRY 1 | true | false | false | false | false | | |
- -------------------------------------------------------------------------
- | 3 | WORRY 4 | true | false | false | true | false | | |
- -------------------------------------------------------------------------
- | 4 | COME -2 | true | false | false | | | | |
- -------------------------------------------------------------------------
- | 5 | WORRY_COUNT | true | false | false | | | | 1 |
- -------------------------------------------------------------------------
- | 6 | COME 3 | true | false | false | false | false | false | |
- -------------------------------------------------------------------------
- | 7 | WORRY 3 | true | false | true | false | false | false | |
- -------------------------------------------------------------------------
- | 8 | WORRY_COUNT | true | false | true | false | false | false | 2 |
- -------------------------------------------------------------------------
- Вывод моей программы:
- 8
- COME 5
- WORRY 1
- WORRY 4
- COME -2
- WORRY_COUNT
- 1
- COME 3
- WORRY 3
- WORRY_COUNT
- 2
- */
- #include <iostream>
- #include <string>
- #include <vector>
- using namespace std;
- int main()
- {
- int q;
- cin >> q;
- vector<bool> queue;
- int arg;
- for (int i = 0; i < q; ++i)
- {
- string operation_code;
- cin >> operation_code;
- if (operation_code == "WORRY_COUNT"s)
- {
- int worry_count = 0;
- for (int i = 0; i < queue.size(); ++i)
- {
- bool val = queue[i];
- if (val == true)
- {
- ++worry_count;
- }
- }
- cout << worry_count << endl;
- }
- else
- {
- cin >> arg;
- if (operation_code == "COME"s)
- {
- queue.resize(queue.size() + arg, false);
- }
- if (operation_code == "WORRY"s)
- {
- queue[arg - 1] = true;
- }
- if (operation_code == "QUIET"s)
- {
- queue[arg - 1] = false;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement