Задача из Яндекс Контест. Python
Ограничение времени 2 секунды
Ограничение памяти 256Mb
Ввод casting.in
Вывод casting.out
В театре работает n актеров. Известно, что среди них a – высоких, b – голубоглазых и с – блондинов. Для главной роли в новом спектакле режиссеру требуется только один высокий голубоглазый блондин. Чтобы спланировать свое время для беседы с каждым таким артистом из труппы театра, режиссеру необходимо узнать, какое максимальное или какое минимальное количество артистов из работающих в театре подходит для этой роли.
Требуется написать программу, которая по заданным числам n, a, b и с определяет минимальное или максимальное количество актеров, с которыми режиссер должен переговорить.
Формат ввода
Первая строка входного файла содержит одно число, которое задает, минимальное или максимальное количество актеров необходимо найти в данном тесте. Это число может принимать следующие значения:
1, если в данном теcте требуется определить минимальное количество актеров;
2, если в данном тесте требуется определить максимальное количество актеров.
Вторая строка входного файла содержит разделенные пробелами четыре целых числа: n, a, b, с (1 ≤ n ≤ 10 000, 0 ≤ a ≤ n, 0 ≤ b ≤ n, 0 ≤ c ≤ n).
Формат вывода
Выходной файл должен содержать одно число – минимальное или максимальное (в зависимости от входных данных) количество актеров, которые могут претендовать на главную роль в новом спектакле
Примечания
В первом примере, поскольку высоких актеров всего трое, то на главную роль не может подойти больше трех человек.
Во втором примере все актеры – блондины и все, кроме одного, – голубоглазые. Тогда среди трех высоких актеров найдутся хотя бы два голубоглазых (и, естественно, они будут блондинами). Следовательно, минимум два актера точно подойдут на главную роль в новом спектакле.
Система оценивания:
Правильные решения для тестов, в которых требуется найти минимальное количество актеров, будут оцениваться из 50 баллов.
Правильные решения для тестов, в которых требуется найти максимальное количество актеров, будут оцениваться из 50 баллов.
Несмотря на выделение отдельных групп тестов для минимального и максимального количества артистов, на окончательную проверку будут приниматься только решения, правильно работающие для всех тестов из условия задачи.
def input_func():
x = int(input())
n, a, b, c = input().split()
n = int(float(n))
a = int(float(a))
b = int(float(b))
c = int(float(c))
return recursion_func(x, n, a, b, c)
def recursion_func(x, n, a, b, c):
max_n = 10000
if n < 0 or n > max_n:
return input_func()
e = [a, b, c]
for i in e:
if n < i or i < 0:
return input_func()
return func(x, n, a, b, c)
def func(x, n, a, b, c):
if x == 2:
return print(min(a, b, c))
else:
max_per = max(0, a, b, c)
d = (a + b + c) - max_per - n
if d >= 0:
return print(d)
else:
return print(0)
input_func()
Мой код при проверке выдаёт ошибку, почему?
Ответы (1 шт):
Про формат данных говорить не буду. А протестировать могу:
Для x = 1, n = 3, a = b = c = 2 программа возвращает единицу. Но вот трое артистов:
высокий голубоглазый,
голубоглазый блондин,
блондин и высокий.
Среди них нет ни одного подходящего, а программа утверждает что один должен быть. Ошибка.