Условие
Август и Беатриса продолжают играть в игру, но Август начал жульничать. На каждый из вопросов Беатрисы он выбирает такой вариант ответа YES
или NO
, чтобы множество возможных задуманных чисел оставалось как можно больше. Например, если Август задумал число от 1 до 5, а Беатриса спросила про числа 1 и 2, то Август ответит NO
, а если Беатриса спросит про 1, 2, 3, то Август ответит YES
.
Если же Бетриса в своем вопросе перечисляет ровно половину из задуманных чисел, то Август из вредности всегда отвечает NO
. Наконец, Август при ответе учитывает все предыдущие вопросы Беатрисы и свои ответы на них, то есть множество возможных задуманных чисел уменьшается.
Первая строка содержит наибольшее число, которое мог загадать Август. Каждая следующая строка содержит очередной вопрос Беатрисы: набор чисел, разделенных пробелами. Последняя строка входных данных содержит одно слово HELP
.
Для каждого вопроса Беатрисы выведите ответ Августа на этот вопрос. После этого выведите через пробел, в порядке возрастания, все числа, которые мог загадать Август после ответа на все вопросы Беатрисы.
Решение
- n = int(input())
- all_nums = set(range(1, n + 1))
- possible_nums = all_nums
- while True:
- guess = input()
- if guess == 'HELP':
- break
- guess = {int(x) for x in guess.split()}
- if len(possible_nums & guess) > len(possible_nums) / 2:
- print('YES')
- possible_nums &= guess
- else:
- print('NO')
- possible_nums &= all_nums - guess
- print(' '.join([str(x) for x in sorted(possible_nums)]))