У нас есть:
· n монстров. · У каждого монстра i есть: · a[i] — количество здоровья (сколько раз нужно ударить) · x[i] — его позиция на прямой (может быть отрицательной) · Мы находимся в точке 0, каждый ход можем атаковать всех монстров с одинаковым расстоянием |x| на 1 удар. · Ограничение: за один ход можно ударить только монстров, находящихся на одном расстоянии от 0 (по модулю). · Вопрос: можно ли победить всех монстров до того, как они нас атакуют?
На самом деле, переформулировка из кода:
На каждом расстоянии d (1, 2, 3, …) суммарное здоровье монстров = c[d]. За первый ход мы можем ударить всех на расстоянии 1, за второй ход — на расстоянии 2, и т.д. Но если суммарное здоровье на расстоянии d больше, чем k * d — мы не успеваем их убить, потому что до удара по ним мы уже потратили ходы на предыдущие расстояния.
c[d] — суммарное здоровье всех монстров на расстоянии d. · Идем по порядку расстояний 1, 2, … · Накапливаем суммарное здоровье s. · Если в какой-то день s > k * d — победа невозможна. · Иначе — YES.
Этот алгоритм проверяет, хватит ли нам ударов, учитывая, что каждый день мы можем бить только по монстрам с одним расстоянием.







