Ограничение по времени: 1 секунда Ограничение по п...

생성일: 2025년 10월 24일

답변에 사용된 모델 GPT-5 Thinking by Chat01

질문

Ограничение по времени: 1 секунда
Ограничение по памяти: 256 мегабайт
Близнецам Петру и Павлу на день рождения подарили игрушечные весы с двумя чашами и тремя гирями. Веса гирь братьям известны и равны а, b, с, при этом а < b < c. Принцип взвешивания на этих весах прост: объект помещается на левую чашу весов, далее гири раскладываются по чашам таким образом, чтобы суммарная масса груза на одной чаше была в точности равна массе груза на другой чаше. Если на левой чаше рядом со взвешиваемым объектом лежат гири массой х, а на правой - гири массой у, то вес объекта равен у - х. При взвешивании не обязательно использовать все гири, Само собой, если ни при каком расположении гирь уравновесить чаши нельзя, то объект на этих весах нельзя взвесить. Первым из школы вернулся Пётр и решил протестировать весы. Он взял грушу, успешно взвесил её при помощи подаренных трёх гирь и узнал её массу, равную р. Когда Павел вернулся с секции и тоже захотел поиграть с весами, Пётр попросил его взвесить эту грушу, Помогите Павлу: по заданным массам а, b, с гирь и массе груши р придумайте какой-нибудь способ расположить их на чашах весов так, чтобы они были уравновешены.
Формат входных данных
В первых трёх строках по одному в строке находятся целые числа а, b, с- массы гирь, в четвёртой целое число р, масса груши. Известно, что 1 <a < b <c< 10" 1 < p < 100, также гарантируется, что грушу массы р можно успешно взвесить на этих весах согласно описанным выше правилам.
Формат выходных данных
В первой строке выведите через пробел массы объектов, которые нужно поместить на левую чашу весов. Первым числом в этой строке должна быть масса груши. Во второй строке выведите через пробел массы гирь, которые нужно поместить на правую чашу весов.
Суммы чисел в первой и второй строках должны совпадать. Все числа должны быть из набора заданных на входе. Если есть несколько верных ответов, выведите один любой.
Ввод 1 2 10 10
Вывод 10 10
реализуй код в Python 3

사고

Understanding balance problem

The given problem involves three weights, a, b, and c (with a < b < c), and a pear with mass p. We need to determine how to balance the pear on a two-pan balance, placing weights on either side to ensure the total mass is equal. We will write a Python program to generate valid solutions. The weights can either be placed on the left pan, right pan, or left unused. Several outputs are possible!

Setting up the balance equation

To solve the problem, I aim to find a signed combination of weights (a, b, c) that balance the pear's mass. The balance equation becomes: p + sum(L) = sum(R), where the weights can either go on the left, right, or stay unused. I’ll check all 27 possible combinations to find which one sums to p. I’ll then output the result.

Handling the output format

I need to ensure the second line, for weights on the right pan, isn't empty since it's guaranteed that the right will have weights. If no weight is placed on the right, the equation becomes impossible to balance, as p is positive. I'll handle edge cases gracefully, ensuring correct formatting and preventing any potential errors or performance issues. The inputs will be integers, which should simplify things.

Generating weight combinations

I will generate all possible combinations of weights for the left and right pans, using the values -1, 0, and 1 for each weight (a, b, c). If the sum matches the pear's mass (p), I’ll output the valid sets for the left and right pans. I’ll print the left pan first with p, followed by the weights in the order a, b, c. I'll stop after the first valid solution.

Thought for 32s

답변

python
# Решение за O(1): перебираем все раскладки трёх гирь по чашам. # s = -1 (на левой вместе с грушей), 0 (не используем), 1 (на правой). # Нужное равенство: s1*a + s2*b + s3*c == p. import sys nums = [int(x) for x in sys.stdin.read().split()] a, b, c, p = nums[:4] weights = [a, b, c] choices = (-1, 0, 1) found = False for s1 in choices: for s2 in choices: for s3 in choices: if s1 * a + s2 * b + s3 * c == p: left = [] right = [] if s1 == -1: left.append(a) elif s1 == 1: right.append(a) if s2 == -1: left.append(b) elif s2 == 1: right.append(b) if s3 == -1: left.append(c) elif s3 == 1: right.append(c) # Первая строка: груша p, затем (возможно пусто) гири слева print(*( [p] + left )) # Вторая строка: гири справа (непусто по условию p>0) print(*right) found = True break if found: break if found: break

이 Q&A 공유하기