CF1734D Slime Escape

题目描述

你正在玩一个叫做 Slime Escape 的游戏。游戏发生在一条数轴上。最初有 $n$ 个史莱姆。对于所有满足 $1 \le i \le n$ 的正整数 $i$,第 $i$ 个史莱姆位于位置 $i$,其生命值为 $a_i$。你控制的是位于位置 $k$ 的史莱姆。 在位置 $0$ 和 $n+1$ 处各有一个出口。你的目标是通过任意次数的游戏操作,抵达任意一个出口。 每进行一次游戏操作,你可以将你的史莱姆向左或向右移动一个位置。然而,如果新位置上有另一个史莱姆,你必须吸收它。吸收史莱姆时,你的史莱姆的生命值会增加被吸收史莱姆的生命值,然后被吸收的史莱姆会从游戏中移除。 注意,有些史莱姆的生命值可能为负数,因此吸收它们时你的生命值会减少。 如果在游戏过程中你的史莱姆的生命值在任何时刻变为负数,你会立即输掉游戏。 你能否在不输掉游戏的前提下,通过任意次数的操作到达任意一个出口?

输入格式

每个测试包含多个测试用例。第一行包含一个整数 $t$($1 \leq t \leq 20000$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含两个正整数 $n$ 和 $k$($3 \leq n \leq 200000$,$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$ 的总和不超过 $200000$。

输出格式

对于每个测试用例,如果你可以在不输掉游戏的情况下逃脱,输出 "YES"(不带引号);否则输出 "NO"(不带引号)。

说明/提示

在第一个测试用例中,你控制的是位于位置 $4$、生命值为 $6$ 的史莱姆。一种逃脱方式是依次吸收位置 $5$、$6$ 和 $7$ 的史莱姆。你的史莱姆在位置 $8$ 处以 $0$ 的生命值逃脱。 在第二个测试用例中,你控制的是位于位置 $1$、生命值为 $232$ 的史莱姆。由于你的史莱姆已经在出口 $0$ 的旁边,你可以直接移动到出口而无需吸收任何史莱姆。 在第三个测试用例中,可以证明你的史莱姆在到达任意一个出口之前,生命值总会变为负数。 在第四个测试用例中,你控制的是位于位置 $4$、生命值为 $6$ 的史莱姆。以下是可能的获胜操作序列: 1. 依次吸收位置 $5$、$6$ 和 $7$ 的史莱姆:吸收生命值为 $-2$ 的史莱姆后生命值变为 $4$;吸收生命值为 $-3$ 的史莱姆后生命值变为 $1$;吸收生命值为 $6$ 的史莱姆后生命值变为 $7$。 2. 依次吸收位置 $3$ 和 $2$ 的史莱姆:生命值变为 $7-7+10=10$。 3. 吸收位置 $8$ 的史莱姆:生命值变为 $10-10=0$。 4. 使用位置 $9$ 的出口。 由于你的史莱姆在整个过程中始终保持非负生命值,因此你获胜了。 由 ChatGPT 4.1 翻译