Все стояли в очередях. Порой кажется, что очередь вовсе не двигается — тогда от отчаяния хочется уйти. Но из середины очереди уходить обидно — можно потерять ценное место. То и дело кто-нибудь в очереди начинает беспокоиться и раздражать окружающих одними и теми же вопросами. А потом отвлекается на что-то и успокаивается. Симулировать подобную очередь в компьютере можно с использованием вектора булевых значений: false будет соответствовать спокойно ждущему посетителю, а true — беспокойному. Недостаток вектора для этой задачи в том, что если очередь всё же продвинется, то нужно будет удалить элемент из начала, а это долгая операция. Поэтому в нашей задаче очередь двигаться не будет, но в её конец люди будут то приходить, то уходить из него. Напишите программу для симуляции такой очереди. Она должна обрабатывать несколько видов запросов, описанных в формате ввода. Мой код #include <iostream> #include <string> #include <vector> using namespace std; int main() { int q; cin >> q; vector <bool> a; for (int i = 0; i < q; ++i) { string operation_code; cin >> operation_code; if (operation_code == "WORRY"s) { int index; cin >> index; a[index] = 1; } else if (operation_code == "HAPPY"s) { int index; cin >> index; a[index] = 0; } else if (operation_code == "COME"s) { int count; cin >> count; a.resize(count, 0); } else if (operation_code == "LAST_WORRY"s) { int last; last = a.size() - 1; if (a[last] == 0) { cout << "happy" << endl; } if (a[last] == 1) { cout << "worry" << endl; } } } }
kageno, Формат ввода На вход программе подаётся количество операций Q, затем их описания. Операция кодируется названием и числовым аргументом. Программа должна обрабатывать следующие операции: WORRY i — пометить i-го человека с начала очереди (в нумерации с 0) как беспокоящегося. HAPPY i — пометить i-го человека (в нумерации с 0) как успокоившегося. COME k — добавить k спокойных человек в конец очереди. Если k отрицательно, то нужно убрать −k человек из конца очереди. LAST_WORRY — напечатать worry, если последний в очереди беспокоится, либо happy, если он спокоен. Формат вывода Для каждой операции LAST_WORRY выведите одно слово: worry или happy. Каждый вывод заканчивайте манипулятором endl
У тебя была ошибка - ты resize'ил вектор, т.е. все предыдущие значения стирались. Вот мой вариант, ну а так, если бы в ТЗ не было написано использовать вектор, можно было бы написать свой стек в котором операции выполнялись бы за О(1) #include <iostream> #include <vector> using namespace std; int main() { vector<bool> qq; int q; cin >> q; for (int i = 0; i < q; ++i) { string operation; cin >> operation; if (operation == "WORRY" || operation == "HAPPY") { int ind; cin >> ind; qq[ind] = (operation == "WORRY"); } else if (operation == "COME") { int k; cin >> k; for (int j = 0; j < abs(k); ++j) { if (k > 0) { qq.push_back(0); } else { qq.pop_back(); } } } else { cout << (*qq.end() ? "worry" : "happy") << endl; } } return 0; } C #include <iostream> #include <vector> using namespace std; int main() { vector<bool> qq; int q; cin >> q; for (int i = 0; i < q; ++i) { string operation; cin >> operation; if (operation == "WORRY" || operation == "HAPPY") { int ind; cin >> ind; qq[ind] = (operation == "WORRY"); } else if (operation == "COME") { int k; cin >> k; for (int j = 0; j < abs(k); ++j) { if (k > 0) { qq.push_back(0); } else { qq.pop_back(); } } } else { cout << (*qq.end() ? "worry" : "happy") << endl; } } return 0; }