#4573. C. Maximum Subarray Sum

C. Maximum Subarray Sum

当前没有测试数据。

题目描述

给定一个长度为 nn 的数组 a1,a2,,ana_1, a_2, \ldots, a_n 和一个正整数 kk,但数组 aa 的某些部分缺失。你的任务是填充缺失的部分,使得数组 aa 的最大子数组和恰好等于 kk,或者报告无解。

形式上,给定一个二进制字符串 ss 和一个部分填充的数组 aa,其中:

  • si=1s_i = 1,表示你记得 aia_i 的值,此时给定 aia_i 的真实值;
  • si=0s_i = 0,表示你不记得 aia_i 的值,此时给定 ai=0a_i = 0(仅为占位符)。

所有你记得的值满足 ai106|a_i| \le 10^6。你可以用绝对值不超过 101810^{18} 的任意整数填充缺失的值。可以证明,若存在解,则一定存在满足 ai1018|a_i| \le 10^{18} 的解。

注:数组 aa 的最大子数组和定义为 max1ijnS(i,j)\max_{1 \le i \le j \le n} S(i, j),其中 S(i,j)=ai+ai+1++ajS(i, j) = a_i + a_{i+1} + \ldots + a_j

输入格式

第一行包含测试用例数 tt

每个测试用例:

  • 第一行包含两个整数 nnkk
  • 第二行包含一个长度为 nn 的二进制字符串 ss
  • 第三行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n。若 si=0s_i = 0,则保证 ai=0a_i = 0

输出格式

对于每个测试用例:

  • 若存在解,输出 Yes,并在下一行输出填充后的数组 a1,a2,,ana_1, a_2, \ldots, a_n
  • 若无解,输出 No。

输出字符串不区分大小写。

样例

10
3 5
011
0 0 1
5 6
11011
4 -3 0 -2 1
4 4
0011
0 0 -4 -5
6 12
110111
1 2 0 5 -1 9
5 19
00000
0 0 0 0 0
5 19
11001
-8 6 0 0 -5
5 10
10101
10 0 10 0 10
1 1
1
0
3 5
111
3 -1 3
4 5
1011
-2 0 1 -5
Yes
4 0 1
Yes
4 -3 5 -2 1
Yes
2 2 -4 -5
No
Yes
5 1 9 2 2
Yes
-8 6 6 7 -5
Yes
10 -20 10 -20 10
No
Yes
3 -1 3
Yes
-2 4 1 -5

数据范围

  • 1t1041 \le t \le 10^4
  • 1n21051 \le n \le 2 \cdot 10^5
  • 1k10121 \le k \le 10^{12}
  • ai106|a_i| \le 10^6
  • 所有测试用例的 nn 之和不超过 21052 \cdot 10^5