Тестирующая система выдаёт 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 шт):
Ответы YES нафиг не нужны, полезны только NO.
Фактически нужно выполнять операцию AND, обнуляя (false) те номера, которые перечислены в NO.
Кроме того, в разборе строки почему-то подразумевается однозначный номер, а нужно выполнить правильный разбор строки, где могут быть и четырехзначные числа. Например, через istringstream