Тестирующая система выдаёт TLE , хотя у меня всё работает

Выдаёт TLE на приведённом тесте

Текст задачи : Карантин позади, а значит, наконец-то можно приступить к очным занятиям! Но вот незадача: несколько школьников пришли без ноутбуков. Егор вызвался решить проблему и отправился на поиски техники. Всего в здании n этажей. Ноутбуки для кружка хранятся на одном из них. К сожалению, карантин был слишком долгим, а здание слишком высокое, поэтому Егор напрочь забыл, на какой этаж ему нужно. Но он не растерялся и решил спросить у Полины! На этом повествование можно закончить, но Полина сейчас читает лекцию, и у нее есть время отвечать только «YES» или «NO». Егор с Полиной коммуницируют следующим образом:

Егор перечисляет номера этажей.

Если среди перечисленных этажей есть этаж с ноутбуками, Полина отвечает «YES». Иначе Полина отвечает «NO».

Процесс повторяется, пока Егор не дойдет до лифта (как известно, в лифте Интернет не ловит).

Как только Егор окажется в лифте, он попросит вашей помощи. Пожалуйста, помогите Егору понять, на каких этажах могут храниться ноутбуки, опираясь на ответы Полины.

Формат входных данных В первой строке содержится число 1 ≤ n ≤ 10 5 — количество этажей в здании. Далее идут строки-перечисления этажей (разумеется, все номера этажей — целые числа от 1 до n ), при этом за каждой такой строкой идет ответ Полины («YES» или «NO»). Наконец, в последней строке содержится слово «HELP», означающее, что Егор зашел в лифт и просит вашей помощи.

Формат результата Выведите через пробел все номера этажей (в порядке возрастания), на которых могут храниться ноутбуки.

Примеры Входные данные

8
5 6 7 8
NO
1 2 3 4
YES
1 3
YES
HELP

Результат работы

1 3
#include <vector>
#include <string>
#include <algorithm>
#include <assert.h>
using namespace std;
int main() {

    string n;
    getline(cin , n);
    vector<int> was(stoi(n)+1);

    string nums ;
    string ans;

    while (nums != "HELP" ) {
        getline(cin, nums);
        if (nums == "HELP") {
            break;
        }
        getline(cin, ans);

        if (ans == "YES") {
            for (int i = 0; i < nums.size(); i+=2) {
                assert(isdigit(nums[i]));
                was[nums[i] - '0']++;
            }
        } else if (ans == "NO") {
            for (int i = 0; i < nums.size(); i+=2) {
                assert(isdigit(nums[i]));
                    was[nums[i] - '0']--;
            }
        }
    }
    int max1 = 0;
    for(int x : was) {
        max1 =max(max1,x);
    }
    for(int i = 1; i <= was.size();i++) {
        if(was[i] == max1) {
            cout << i << " ";
        }
    }



    return 0;
}

Ответы (1 шт):

Автор решения: MBo

Ответы YES нафиг не нужны, полезны только NO.

Фактически нужно выполнять операцию AND, обнуляя (false) те номера, которые перечислены в NO.

Кроме того, в разборе строки почему-то подразумевается однозначный номер, а нужно выполнить правильный разбор строки, где могут быть и четырехзначные числа. Например, через istringstream

→ Ссылка