Codeforces Round 822 (Div. 2) |
---|
Закончено |
Вы играете в игру под названием Слаймовый побег. Игра проходит на числовой прямой. Изначально на прямой $$$n$$$ слаймов. Для каждого целого числа $$$i$$$ такого, что $$$1 \le i \le n$$$, $$$i$$$-й слайм находится в позиции $$$i$$$ и имеет здоровье $$$a_i$$$. Вы управляете слаймом в позиции $$$k$$$.
С прямой два выхода в позициях $$$0$$$ и $$$n+1$$$. Ваша цель — достигнуть любого из двух выходов после выполнения любого количества шагов.
За один шаг вы можете переместить свой слайм налево или направо на одну позицию. Однако если в позиции, куда вы перемещаете свой слайм, есть другой слайм, вы должны его поглотить. При поглощении слайма к здоровью вашего слайма добавляется здоровье поглощенного слайма, а после этого поглощенный слайм убирается из игры.
Обратите внимание, что у некоторых слаймов может быть отрицательное здоровье, и ваше здоровье уменьшится при поглощении таких слаймов.
Вы проигрываете, если в какой-то момент игры здоровье вашего слайма становится отрицательным.
Можете ли вы достичь одного из двух выходов, не проиграв?
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \leq t \leq 20\,000$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.
Первая строка каждого набора входных данных содержит два целых числа $$$n$$$, $$$k$$$ ($$$3 \leq n \leq 200\,000$$$, $$$1 \leq k \leq n$$$) — количество слаймов и позиция вашего слайма.
Вторая строка содержит $$$n$$$ целых чисел $$$a_1, a_2, \ldots, a_n$$$ ($$$-10^9 \leq a_i \leq 10^9$$$) — здоровье слаймов.
Гарантируется, что здоровье вашего слайма неотрицательное ($$$a_k \geq 0$$$), и у всех остальных слаймов здоровье не равно нулю ($$$a_i \ne 0$$$ при $$$i \ne k$$$).
Гарантируется, что сумма значений $$$n$$$ по всем наборам входных данных не превосходит $$$200\,000$$$.
Для каждого набора входных данных выведите «YES» (без кавычек), если можно добраться до выхода, не проиграв, иначе выведите «NO» (без кавычек).
67 4-1 -2 -3 6 -2 -3 -13 1232 -500 -7007 4-1 -2 -4 6 -2 -4 -18 4-100 10 -7 6 -2 -3 6 -108 2-999 0 -2 3 4 5 6 77 37 3 3 4 2 1 1
YES YES NO YES NO YES
В первом примере вы управляете слаймом в позиции $$$4$$$ со здоровьем $$$6$$$. Один из способов выбраться — поглотить слаймов в позициях $$$5$$$, $$$6$$$ и $$$7$$$. Вы достигнете выхода со здоровьем $$$0$$$ в позиции $$$8$$$.
Во втором примере вы управляете слаймом со здоровьем $$$232$$$ в позиции $$$1$$$. Так как ваш слайм уже у выхода в позиции $$$0$$$, вы можете сразу переместиться туда, не поглощая других слаймов.
В третьем примере можно показать, что здоровье вашего слайма всегда достигнет отрицательных значений до того, как вы достигнете выхода.
В четвертом примере вы управляете слаймом в позиции $$$4$$$ со здоровьем $$$6$$$. Ниже описана возможная последовательность действий для победы.
Так как здоровье вашего слайма всегда оставалось неотрицательным, вы выиграли.
Название |
---|