Нужна помощь с олимпиадной задачей
В одном курином ресторане можно купить:
1 ножку + 1 крыло, 1 ножку + 1 бедро, 1 бедро, 2 крыла, 3 крыла. Требуется определить, можно ли купить ровно k крыльев, n ножек и b бедер.
Входные данные
Вводятся три числа k, n, b. Все числа целые неотрицательные, не превосходящие 100.
Выходные данные
Выведите слово YES, если купить указанный набор можно, NO — если нельзя (заглавными латинскими буквами).]
Мой код(выдает неверный ответ в проверяющей системе):
k=int(input())
n=int(input())
b=int(input())
kp1=k+n
kp2=n+b
kp3=b
kp4=2*k
kp5=3*k
if n!=0 and k==0:
print('NO')
else:
if k+b<n:
print('NO')
else:
if kp5>=0 and kp2>=0 and kp3>=0:
if (k-2*kp4-kp1)%3==0:
print('NO')
else:
print('YES')
else:
print('NO')
Ответы (3 шт):
Автор решения: Alioshca Z
→ Ссылка
Сваял нечто. Авось будет работать)
k=int(input())
n=int(input())
b=int(input())
if n > 0:
if (k + b) >= n:
if n == (k + b):
print('YES')
else:
if k > 0:
if (k - b) % 2 == 0 or (k - b) % 3 == 0:
print('YES')
else:
print('NO')
else:
print('YES')
else:
print('NO')
else:
if k > 0 and b > 0:
if k % 2 == 0 or k % 3 == 0:
print('YES')
else:
print('NO')
else:
print('NO') # Эту строчку поменять на YES, если в рестике можно купить ноль всех куриных частей
Автор решения: n1tr0xs
→ Ссылка
Можно создать список возможных покупок и проверить на вхождение
k=int(input())
n=int(input())
b=int(input())
my_list = [k, n, b]
# [крыло, ножка, бедро]
allowed = [[1,1,0], [0,1,1], [0,0,1],[2,0,0],[3,0,0]]
if my_list in allowed:
print('YES')
else:
print('NO')
Автор решения: MikhailS
→ Ссылка
k = int(input())
n = int(input())
b = int(input())
if n > b:
if (n - b) > k:
print('NO')
else:
if k - (n - b) == 1:
print('NO')
else:
print('YES')
elif k == 1:
print('NO')
else:
print('YES')