Загрузка...

Помогите с задачей

Тема в разделе C/C++ создана пользователем impelix 21 авг 2022. 382 просмотра

  1. impelix
    impelix Автор темы 21 авг 2022 5 28 ноя 2021
    Все стояли в очередях. Порой кажется, что очередь вовсе не двигается — тогда от отчаяния хочется уйти. Но из середины очереди уходить обидно — можно потерять ценное место. То и дело кто-нибудь в очереди начинает беспокоиться и раздражать окружающих одними и теми же вопросами. А потом отвлекается на что-то и успокаивается.
    Симулировать подобную очередь в компьютере можно с использованием вектора булевых значений: 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;
    }
    }
    }
    }
     
  2. kageno
    kageno 21 авг 2022 1625 12 дек 2016
    И что ты хочешь то:interesting: Где формат входных данных, где выходных, воду одну скопипастил
     
    1. impelix Автор темы
      kageno,

      Формат ввода
      На вход программе подаётся количество операций Q, затем их описания.
      Операция кодируется названием и числовым аргументом. Программа должна обрабатывать следующие операции:

      WORRY i — пометить i-го человека с начала очереди (в нумерации с 0) как беспокоящегося.
      HAPPY i — пометить i-го человека (в нумерации с 0) как успокоившегося.
      COME k — добавить k спокойных человек в конец очереди. Если k отрицательно, то нужно убрать −k человек из конца очереди.
      LAST_WORRY — напечатать worry, если последний в очереди беспокоится, либо happy, если он спокоен.

      Формат вывода
      Для каждой операции LAST_WORRY выведите одно слово: worry или happy.
      Каждый вывод заканчивайте манипулятором endl
  3. Shamssy
    Shamssy 21 авг 2022 297 9 июн 2022
    Я не математик
     
    21 авг 2022 Изменено
  4. Whales_Nik
    Whales_Nik 21 авг 2022 50 27 мар 2022
    У тебя была ошибка - ты resize'ил вектор, т.е. все предыдущие значения стирались. Вот мой вариант, ну а так, если бы в ТЗ не было написано использовать вектор, можно было бы написать свой стек в котором операции выполнялись бы за О(1)
    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;
    }
     
Top
Загрузка...