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 翻译