Качели
Ограничение по времени: 0.5 секунды
Ограничение по памяти: 256 мегабайт
Трое друзей Аня, Боря и Саша пришли на детскую площадку, чтобы покачаться на качелях‑балансире. Качели представляют собой длинную балку, закреплённую в центре, на которую дети садятся с разных концов.
Массы детей равны A, B и C кг. Чтобы держать баланс на качелях, разница масс на двух концах качелей должна быть не более D кг. Друзьям повезло: рядом с площадкой оказалась груда достаточно тяжёлых камней. Один из детей может взять с собой любой камень, чтобы сделать разность масс на концах качелей допустимой. Помогите друзьям определить минимальную массу камня, благодаря которому они смогут покачаться на качелях.
Формат входных данных
Программа получает на вход три числа A, B, C, записанных в отдельных строках, массы друзей. В четвёртой строке записано число D наибольшая допустимая разница масс на концах качелей. Все числа целые, положительные и не превосходящие 109.
Формат выходных данных
Программа должна вывести одно целое число минимально необходимую массу камня, которую нужно добавить на одну из сторон качелей, чтобы друзья смогли покачаться на них, сев оптимально. Если камень им не понадобится, программа должна вывести число 0.
Система оценки
Решения, правильно работающие, когда все входные числа не превосходят 105, будут оцениваться в 40 баллов.
Замечание
В первом примере Аня и Саша сядут на одну сторону, их суммарная масса будет равна 65 кг. На другую сторону сядет Боря, взяв 15-килограммовый камень, тогда масса Бори с камнем составит 55 кг. Разница весов на концах качелей примет значение 10 кг.
Во втором примере Аня и Боря сядут на одну сторону (50 кг), Саша на другую сторону (45 кг). Разница весов будет равна 5 кг, поэтому камень не понадобится.
Ввод
30
40
35
10
Вывод
15
Ввод
30
20
45
10
Вывод
0
Ответы
1 #include
2 #include
3 #include
4
5 using namespace std;
6
7 int main() {
8 int a, b, c, d;
9 cin >> a >> b >> c >> d;
10
11 vector weights = {a, b, c};
12 sort(weights,begin(), weights,end());
13
14 int difference = abs(weights[0] + weights[1] — weights[2]);
15 int result = max(0, difference — d);
16
17 cout << result << endl;
18 return 0;
19 }
Чтобы решить эту задачу, можно использовать следующий алгоритм:
Ввести три числа A, B, C, представляющие массы детей.
Ввести число D, представляющее наибольшую допустимую разницу масс на концах качелей.
Посчитать все возможные комбинации масс на концах качелей:
A + B против C
A + C против B
B + C против A
Для каждой комбинации посчитать разницу масс на концах качелей.
Если разница масс больше D, то посчитать минимальную массу камня, который нужно добавить на одну из сторон качелей, чтобы сделать разницу масс допустимой.
Если минимальная масса камня меньше или равна нулю, то вывести 0, иначе вывести минимальную массу камня.
Реализация на Python:
A = int(input())
B = int(input())
C = int(input())
D = int(input())
def calculate_min_weight(A, B, C, D):
combinations = [(A + B, C), (A + C, B), (B + C, A)]
min_weight = float(‘inf’)
for combination in combinations:
diff = abs(combination[0] — combination[1])
if diff > D:
weight = diff — D
min_weight = min(min_weight, weight)
if min_weight == float(‘inf’):
return 0
else:
return min_weight
print(calculate_min_weight(A, B, C, D))
Эта программа вводит три числа A, B, C и число D, затем вызывает функцию calculate_min_weight, которая возвращает минимальную массу камня, который нужно добавить на одну из сторон качелей, чтобы сделать разницу масс допустимой. Если минимальная масса камня меньше или равна нулю, то функция возвращает 0.