CF2231D Maximum Prefix Sums
题目描述
“521”在中文中与“我爱你”谐音。在这个特殊的日子里,小 S 想送给小 A 一些精心准备的序列,以纪念他们多年来的友谊。
小 S 准备了一个数组 $a_1, a_2, \ldots, a_n$。我们定义它的前缀和数组 $b_1, b_2, \ldots, b_n$,其中 $b_i = a_1 + a_2 + \ldots + a_i$。同时定义 $b$ 的前缀最大值数组 $c_1, c_2, \ldots, c_n$,其中 $c_i = \max(b_1, b_2, \ldots, b_i)$。
现在数组 $a$ 部分丢失了,但幸运的是小 S 还保留着数组 $c$。你的任务是还原数组 $a$ 并将其发送给小 A,或者报告不存在这样一个数组——在这种情况下,可爱又善良的小 A 也不会生气。
具体来说,给定一个二进制字符串 $s$,一个部分已知的数组 $a$,以及一个数组 $c$,其中:
- 如果你记得 $a_i$ 的值,那么 $s_i = 1$,并且你会得到 $a_i$ 的真实值。
- 如果你不记得 $a_i$ 的值,那么 $s_i = 0$,并且你会得到 $a_i = 0$。
输入格式
每个测试点包含多组测试用例。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的个数。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \times 10^5$)。
第二行包含一个长度为 $n$ 的二进制字符串 $s$($s_i \in \{\text{0}, \text{1}\}$)。
第三行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($|a_i| \le 10^6$)。如果 $s_i = 0$,则保证 $a_i = 0$。
第四行包含 $n$ 个整数 $c_1, c_2, \ldots, c_n$($|c_i| \le 2 \times 10^{11}$)。
保证所有测试用例的 $n$ 之和不超过 $2 \times 10^5$。
输出格式
对于每个测试用例,如果数组 $a$ 存在,则在第一行输出 "Yes",否则输出 "No"。你可以用任意大小写输出答案(例如 "YeS", "YES", "NO", "nO" 都是可以接受的)。
如果至少存在一个解,在第二行输出 $n$ 个整数 $a_1, a_2, \ldots, a_n$($|a_i| \leq 10^{18}$)。如果有多个满足要求的数组,你可以任选一个输出。
说明/提示
在第一个测试用例中,有:
- $a = [1, 2, -1, 0]$。
- $b = [1, 3, 2, 2]$。
- $c = [1, 3, 3, 3]$。
在第三个测试用例中,正确的数组 $a$ 应该等于 $[1]$,所以不存在满足条件的解。
由 ChatGPT 5 翻译