CF2248E Excuse for Breaks
题目描述
给定三个整数 $n$、$m$ 和 $d$,以及两个数组 $p_1, p_2, \ldots, p_m$ 和 $r_1, r_2, \ldots, r_m$。数组 $p$ 严格递增。
对于任意长度的二进制数组 $a$(即 $|a|$ 不一定等于 $n$),定义函数 $f(a)$,其功能如下伪代码所示:
```
function f(a):
v := 0
c := 0
for i from 1 to length(a):
if a[i] is equal to 1:
v := v + d
c := c + 1
else:
c := 0
for j from 1 to m:
if c is equal to p[j]:
v := v + r[j]
if c is equal to n:
c := 0
return v
```
其中,“:=”表示赋值操作。记 $I(a)$ 表示长度为 $|a|$ 的 $[1,1,\ldots,1]$ (全 1)数组。也就是说,$I(a)$ 由 $|a|$ 个 1 组成。
请判断是否存在某个二进制数组 $a$,使得 $f(a) > f(I(a))$。
输入格式
每个测试用例包含多组数据。第一行为测试用例个数 $t$($1 \le t \le 2000$)。每组测试用例描述如下。
每组测试用例的第一行为三个整数 $n$、$m$ 和 $d$($1 \le n \le 10^9$,$0 \le m \le 2000$,$0 \le d \le 10^9$)。
接下来的 $m$ 行每行包含两个整数 $p_i$ 和 $r_i$($1 \le p_i \le n$,$1 \le r_i \le 10^9$)。
数组 $p$ 严格递增。
保证所有测试用例中 $m$ 之和不超过 $2000$。
输出格式
对于每组测试用例,如果存在满足条件的二进制数组 $a$,输出 "YES";否则输出 "NO"。
输出大小写均可。例如,"yEs", "yes", "Yes" 和 "YES" 都会被识别为肯定的结果。
说明/提示
在第一个测试用例中,可以选择 $a = [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]$。
该数组 $a$ 共包含 $16$ 个 1,因此 $d$ 的总贡献为 $16 \times 3 = 48$。其中连续 1 的段长分别为 $9$、$4$ 和 $3$,其奖励分别为 $32$、$15$ 和 $14$。所以 $f(a) = 48 + 32 + 15 + 14 = 109$。
而 $I(a)$ 为 $18$ 个 1。在计算 $f(I(a))$ 时,它们组成三个完整的 $6$ 个 1 的区块,每个区块的贡献为 $6 \times 3 + 5 + 9 + 1 + 3 = 36$。因此 $f(I(a)) = 3 \times 36 = 108$。由于 $f(a) > f(I(a))$,答案为 "YES"。
第二个测试用例中不存在满足条件的数组 $a$,因此答案为 "NO"。
由 ChatGPT 5 翻译