
Задача 2: Наборы пирожных На складе кондитерской фабрики хранятся пирожные двух видов — круассаны
и эклеры. Круассанов A штук, а эклеров — B штук. Есть неограниченный запас подарочных коробок, в каждую коробку можно положить только три пирожных. При этом требуется, чтобы в коробке были пирожные обоих видов, то есть в одну коробку можно положить два круассана и один эклер или один круассан и два эклера. Определите, можно ли упаковать все имеющиеся пирожные в коробки и выведите подходящий способ размещения пирожных по коробкам. Входные данные Программа получает на вход два целых числа A и B, записанных в отдельных строках. 1 ≤ A ≤ 109, 1 ≤ B ≤ 109. Выходные данные Если можно разложить все пирожные по коробкам в соответствии с условием задачи, программа должна вывести два целых числа. Первое число равно количеству коробок, в которых лежит два круассана и один эклер. Второе число равно количеству коробок, в которых лежит один круассан и два эклера. Если разложить все пирожные по коробкам нужным способом нельзя, программа должна вывести одно число −1. Система оценивания Решение, правильно работающее только для случаев, когда числа A и B не превосходят 100, будет оцениваться в 60 баллов. Примеры Ввод Вывод Пояснение 4 5 1 2 Нужно взять одну коробку с двумя круассанами и одним эклером и две коробки с одним круассаном и двумя эклерами. Всего получится 4 круассана и 5 эклеров. -------------------------------------------------------------------------------------------------------------------------- 5 3 −1 Разложить пирожные по коробкам нельзя.

Ответы на вопрос

Ответ:
var
A, B, K, R : longint;
begin
readln(A, B);
if (A mod 2 = 1) and (B mod 2 = 1) then
writeln('-1');
if (A mod 2 = 0) and (B mod 2 = 0) and
((A div 2 <> B) or (B div 2 <> A)) then
writeln('-1');
if (A mod 2 = 0) and (B mod 2 = 0) and
((A div 2 = B) or (B div 2 = A)) then
if A > B then
writeln(B, '0')
else
writeln('0', A);
if (A mod 2 = 1) and (B mod 2 = A) then begin
A := A-1;
B := B-2;
if (A div 2 = B) or (B div 2 = A) then
if A > B then
writeln(B, '0')
else
writeln('0', A);
end;
if (B mod 2 = 1) and (A mod 2 = B) then begin
B := B-1;
A := A-2;
if (B div 2 = A) or (A div 2 = B) then
if B > A then
writeln(B, '0')
else
writeln('0', A)
end;
end.
На 12 баллов. Всё что могу.



Ответ:
a = int(input())
b = int(input())
if (a + b) % 3 != 0:
print(-1)
else:
if (a // b == 2) or (b // a == 2):
if a % 2 < b % 2:
print((a + b) // 3, 0)
elif a % 2 > b % 2:
print(0, (a + b) // 3)
else:
print(-1)
else:
if (b - a == b % a) or (a - b == a % b):
print(a // 3, (b - (a // 3)) // 2)
else:
print(-1)
Объяснение:
набрал 36 баллов




Для решения этой задачи мы должны определить, можно ли упаковать все имеющиеся пирожные в коробки, так чтобы в каждой коробке были пирожные обоих видов (2 круассана и 1 эклер или 1 круассан и 2 эклера).
Сначала давайте определим, сколько коробок с пирожными каждого вида мы можем сформировать, используя имеющиеся круассаны и эклеры.
Допустим, у нас есть A круассанов и B эклеров. Мы хотим сформировать как можно больше коробок. Каждая коробка содержит 3 пирожных. Поэтому максимальное количество коробок, которые мы можем сформировать, будет равно min(A / 2, B / 2), где min() берет минимум из двух значений.
Теперь давайте проверим, можем ли мы действительно сформировать такое количество коробок и сколько останется круассанов и эклеров после этого.
Если min(A / 2, B / 2) равно X (количество коробок), то количество оставшихся круассанов будет A - 2 * X, а количество оставшихся эклеров будет B - 2 * X.
Если остаток от деления A - 2 * X или B - 2 * X не равен нулю, то мы не можем сформировать все коробки, которые хотели бы, и ответ будет -1. В противном случае мы успешно сформировали X коробок, в каждой из которых по 2 круассана и 1 эклер, и остались некоторые остатки круассанов и эклеров.
Давайте запишем этот алгоритм на Python:
python# Ввод данных
A = int(input())
B = int(input())
# Вычисляем максимальное количество коробок
X = min(A // 2, B // 2)
# Вычисляем остатки круассанов и эклеров
remaining_croissants = A - 2 * X
remaining_eclairs = B - 2 * X
# Проверяем, можем ли сформировать все коробки
if remaining_croissants % 2 == 0 and remaining_eclairs % 2 == 0:
print(X, remaining_croissants // 2 + remaining_eclairs // 2)
else:
print(-1)
Этот код сначала вычисляет максимальное количество коробок, которое можно сформировать, и затем проверяет, можем ли мы сформировать все коробки. Если да, он выводит количество коробок с 2 круассанами и 1 эклером, а также количество коробок с 1 круассаном и 2 эклерами. Если нельзя сформировать все коробки, выводится -1.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili