Задача из Яндекс Контест. 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 шт):

Автор решения: Stanislav Volodarskiy

Про формат данных говорить не буду. А протестировать могу:

Для x = 1, n = 3, a = b = c = 2 программа возвращает единицу. Но вот трое артистов:

  1. высокий голубоглазый,

  2. голубоглазый блондин,

  3. блондин и высокий.

Среди них нет ни одного подходящего, а программа утверждает что один должен быть. Ошибка.

→ Ссылка