CF2107C.Maximum Subarray Sum
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给你一个长为 n 的序列 a=(a1,a2,⋯,an),a 的一部分丢失了。你的任务是填补丢失的部分使得 a 的最大子区间和为 k,或报告无解。
给你一个 01 串 s 和 a:
- 如果 ai 没有被丢失,si=1,此时 ai 记录了它的真实值。
- 如果 ai 被丢失,si=0,此时给到你的序列 a 中 ai=0。
输入的 a 满足 ∣ai∣≤106,你填充后的 a 需要满足 ∣ai∣≤1018。可以被证明如果存在解,那么一定存在一个满足 ∣ai∣≤1018 的解。
一个长为 n 的数列 a 的最大子区间和是 1≤i≤j≤nmaxk=i∑jak。
输入格式
多组数据,第一行一个整数为数据组数 t(1≤t≤104)。
对于每组数据,第一行两个整数 n,k(1≤n≤2×105,1≤k≤1012)。
第二行为一个长为 n 的 01 字符串 s。
第三行 n 个整数 a1,a2,⋯,an(∣ai∣≤106)。保证 si=0 时 ai=0。
保证一个测试点中 ∑n≤2×105。
输出格式
对于每组数据,第一行一个字符串,如果有解输出 Yes,如果无解输出 No。大小写不敏感。
如果有解,第二行输出填充后的字符串 a。你需要保证 ∣ai∣≤1018。
如果有多种解法,输出任意一种均可。
输入输出样例
输入#1
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
输出#1
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
说明/提示
第一组数据中,向唯一丢失的 a1 填充 4 得到 a=(4,0,1),它的最大子区间和为 5。
第二组数据中,向唯一丢失的 a3 填充 5 得到 a=(4,−3,5,−2,1),它的最大子区间和为 6。
第三组数据中 a1 和 a2 待填充,向它们填充 2 得到 a=(2,2,−4,−5),它的最大子区间和为 4。a=(0,4,−4,−5) 也是一种解法。
对于第四组数据,没有合法的填充 a 的方式。例如 a=(1,2,0,5,−1,9),它的最大子区间和为 16 而非 12。
By chenxi2009
输入解题思路,AI测评打分。不知道怎么写?