0
0 комментариев

Условие задачи с Coursera

Август и Беатриса продолжают играть в игру, но Август начал жульничать. На каждый из вопросов Беатрисы он выбирает такой вариант ответа YES или NO, чтобы множество возможных задуманных чисел оставалось как можно больше. Например, если Август задумал число от 1 до 5, а Беатриса спросила про числа 1 и 2, то Август ответит NO, а если Беатриса спросит про 1, 2, 3, то Август ответит YES.

Если же Бетриса в своем вопросе перечисляет ровно половину из задуманных чисел, то Август из вредности всегда отвечает NO. Наконец, Август при ответе учитывает все предыдущие вопросы Беатрисы и свои ответы на них, то есть множество возможных задуманных чисел уменьшается.

Первая строка содержит наибольшее число, которое мог загадать Август. Каждая следующая строка содержит очередной вопрос Беатрисы: набор чисел, разделенных пробелами. Последняя строка входных данных содержит одно слово HELP.

Для каждого вопроса Беатрисы выведите ответ Августа на этот вопрос. После этого выведите через пробел, в порядке возрастания, все числа, которые мог загадать Август после ответа на все вопросы Беатрисы.

Тест1

входные данные
10
1 2 3 4 5
2 4 6 8 10
HELP
 
правильный ответ
NO
YES
6 8 10

Тест2

входные данные
10
1
2
3
4
5
6
7
8
9
HELP
 
правильный ответ
NO
NO
NO
NO
NO
NO
NO
NO
NO
10

Тест3

входные данные
16
1 2 3 4 5 6 7 8
9 10 11 12
13 14
16
HELP
 
правильный ответ
NO
NO
NO
NO
15

Моё решение выглядит так:

total = set(range(1, (int(input()) + 1)))
while True:
    beatriss = input()
    if beatriss == 'HELP':
        break
    numbers = set(map(int, beatriss.split()))
    if len(total - numbers) < len(total & numbers):
        print('YES')
        total &= numbers
    else:
        print('NO')
        total -= numbers
print(*sorted(map(int, total)))

Тестирующая система выдаёт ошибку:
Test 10
Time Limit Exceeded

Ограничение по времени = 1000 мс
Какие данные система вводит для тестирования — нет данных


Добавить комментарий