printРабочее место участника

printЗадачи

2143. Войны планет

Ограничения: время – 2s/4s, память – 256MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Все большую и большую популярность набирает игра "Войны планет". Правила игры предельно просты. На плоскости расположены `n` планет, каждая из которых характеризуется координатами своего место положения `x_i`, `y_i` и скоростью производства космических кораблей `s_i`. В игру играют два игрока. Изначально каждый игрок имеет в своем распоряжении одну планету, а все остальные планеты в начале игры являются нейтральными. Также на каждой планете в начале находится некоторое число кораблей `p_i`. На нейтральных планетах – это нейтральные войска, а на планетах игроков – это войска соответствующих игроков.
Игра состоит из раундов. В начале каждого раунда на планетах, не являющихся нейтральными, появляются дополнительные `s_i` кораблей. Корабли мгновенно оказываются в распоряжении игрока, владеющего соответствующей планетой.
После этого игроки начинают пересылать войска с планеты на планету, при этом игрок может посылать корабли только с планет, которые ему принадлежат, и только не больше кораблей, чем на этой планете есть. Если игрок пересылает корабли с планеты с координатами `("sx",\ "sy")` на планету с координатами `("dx",\ "dy")`, то корабли прибывают к планете назначения после `|~\ sqrt{("sx"\ -\ "dx")^2\ +\ ("sy"-"dy")^2}\ ~|` раундов (`|~a~|` означает минимальное целое число, не меньшее `a`).
Затем происходит прибытие войск на планеты.
В конце раунда, если на какой-то планете оказываются войска обоих игроков, то они вступают в бой. В результате сражения у каждого из игроков уничтожается `x\ =\ min(p_1,p_2)` кораблей, где `p_1` – число кораблей первого игрока на этой планете, а `p_2` – второго. После этого, если на планете остались войска игрока и нейтральные войска, то в бой вступают они, при этом бой происходит по тем же правилам.
После всех сражений, если на планете более нуля кораблей какого-то игрока, то он захватывает планету. Иначе владелец планеты остается неизменным. На этом раунд заканчивается.
Напишите программу, которая обрабатывала бы события игры, а также могла отвечать на запросы про `i`-ую планету, сколько на ней войск и кто ею владеет.
В первой строке входного файла целое число `n` (`2\ ≤\ n\ ≤\ 100`) – число планет. Далее следуют `n` строк, по четыре целых числа `x`, `y`, `s` и `p` в каждой. Числа `x` и `y` (`|x|,\ |y|\ ≤\ 20`) – координаты соответствующей планеты, `s` (`0\ ≤\ s\ ≤\ 10`) – скорость производства кораблей, `p` (`0\ ≤\ p\ ≤\ 100`) – количество кораблей на планете в начале игры. В следующей строке следуют два целых числа  – номера планет первого и второго игроков. Планеты нумеруются с единицы в порядке появления во входном файле. Гарантируется, что координаты всех планет различны.
В следующей строке входного файла одно целое число `m` (`0\ ≤\ m\ ≤\ 1000`) – количество событий и запросов, которые необходимо обработать. Каждый запрос занимает отдельную строку и начитается и с целого числа `t`, характеризующего тип события/запроса.
Если `t\ =\ 0`, то это означает конец раунда. Считается что все сражения происходят именно в момент конца раунда.
Если `t\ =\ 1`, то происходит пересылка войск. Тогда в строке далее идут три целых положительных числа `"sp"`, `"dp"` и `"ships"` – номер планеты, с которой отправляются корабли, номер планеты, на которую отправляются корабли, и число отправляемых кораблей соответственно. Гарантируется, что на планете `"sp"` будет не менее чем `"ships"` кораблей, планета `"sp"` не будет нейтральной и планеты `"sp"` и `"dp"` не совпадают.
Если `t\ =\ 2`, то далее идет целое число `"planet"` – номер планеты, о которой запрашивается информация.
Для каждого запроса о планете выведите в отдельной строке ее владельца и количество войск на ней на момент запроса. Следуйте формату примера. Считается что все запросы происходят после производства кораблей и до прибытия войск на планеты.

Пример ввода

3
0 0 1 100
1 0 10 10
2 0 0 100
1 3
26
1 1 2 60
1 3 2 50
2 1
2 2
2 3
0
2 1
2 2
2 3
0
2 1
2 2
2 3
1 1 2 1
2 1
2 2
2 3
0
0
2 1
2 2
2 3
1 3 2 31
0
0
2 2

Пример вывода

Player1 41
Neutral 10
Player2 50
Player1 42
Neutral 10
Player2 50
Player1 43
Neutral 0
Player2 50
Player1 42
Neutral 0
Player2 50
Player1 44
Player1 11
Player2 50
Player2 20
В примере войска, вылетающие в первом раунде, долетают до планеты `2` только во конце второго раунда. При этом в конце второго дня на планете `2` окажутся `10` нейтральных кораблей, `60` кораблей первого игрока и `50` – второго. После битвы кораблей игроков останутся `10` нейтральных кораблей и `10` кораблей первого игрока. После из сражения на планете `2` не будет ни одного корабля и она останется нейтральной.
В третьем раунде первый игрок высылает один корабль на планету `2`, который в конце четвертого раунда ее захватывает.
В пятом раунде второй игрок посылает `31` корабль на вторую планету, но когда они прибывают на планету `2` на ней уже есть `31` корабль первого игрока. Корабли полностью уничтожают друг друга, но планета остается под контролем первого игрока.
Источник: neerc.ifmo.ru/school
loading