Мне нужна подсказка, чтобы начать разгадывать эту загадку программирования

У вас есть комната, полная весов и гирь. Все весы весят десять фунтов и считаются идеально сбалансированными, если сумма весов на их левой и правой сторонах одинакова. Вы разместили некоторые веса на некоторых весах, а некоторые - на других весах. Получив описание того, как расположены весы и какой дополнительный вес приходится на каждую из них, определите, как добавить вес к весам, чтобы все они были идеально сбалансированы.

Может быть несколько способов уравновесить все, но всегда выбирайте способ, при котором дополнительный вес будет приходиться на самые низкие весы.

Входной файл начинается с единственного целого числа N, указывающего количество балансов. Сальдо 0 указано строками 1 и 2, сальдо 1 указано строками 3 и 4 и т. Д. Каждая пара строк отформатирована следующим образом:

WL <balances>
WR <balances>

WL и WR указывают вес, добавленный к левой и правой сторонам соответственно. представляет собой разделенный пробелами список других балансов, находящихся на этой стороне этого баланса. может содержать ноль или более элементов.

Рассмотрим следующие исходные данные:

4
0 1
0 2
0
0 3
3
0
0
0

Balance 0 has balance 1 on its left side and balance 2 on its right side
Balance 1 has balance 3 on its right side
Balance 2 has three pounds on its left side
Balance 3 has nothing on it

Поскольку на весах 3 ничего нет, они уже идеально сбалансированы и весят в общей сложности 10 фунтов. Баланс 2 не имеет другого баланса, поэтому все, что нам нужно сделать, это уравновесить его, положив три фунта на его правую сторону.Теперь он весит всего 16 фунтов. Баланс 1 имеет на правой стороне баланс 3, который весит 10 фунтов, поэтому мы просто положили 10 фунтов на его левую сторону. Весы 1 всего 30 фунтов. Баланс 0 имеет баланс 1 с левой стороны (30 фунтов) и баланс 2 с правой стороны (16 фунтов), мы можем сбалансировать его, добавив 14 фунтов к правой стороне.

Вывод должен состоять из N строк, в n-й строке указывается вес, добавленный к n-м весам, в следующем формате:

<index>: <weight added to left side> <weight added to right side>

Таким образом, результат для этой проблемы будет следующим:

0: 0 14
1: 10 0
2: 0 3
3: 0 0

Я пробовал, но на самом деле я я думаю, плохо умею программировать. С чего мне начать? пожалуйста, не публикуйте решение; Я хочу учиться.

25
задан Peter Cordes 3 December 2015 в 08:12
поделиться