LVDN's blog

By LVDN, history, 97 minutes ago, In Russian

У нас есть:

· 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.

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

  • Vote: I like it
  • 0
  • Vote: I do not like it