CF2107C.Maximum Subarray Sum

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给你一个长为 nn 的序列 a=(a1,a2,⋯ ,an)a=(a_1,a_2,\cdots,a_n),aa 的一部分丢失了。你的任务是填补丢失的部分使得 aa 的最大子区间和为 kk,或报告无解。

给你一个 01 串 ss 和 aa:

  • 如果 aia_i 没有被丢失,si=1s_i=1,此时 aia_i 记录了它的真实值。
  • 如果 aia_i 被丢失,si=0s_i=0,此时给到你的序列 aa 中 ai=0a_i=0。

输入的 aa 满足 ∣ai∣≤106\vert a_i\vert\le 10^6,你填充后的 aa 需要满足 ∣ai∣≤1018\vert a_i\vert \le 10^{18}。可以被证明如果存在解,那么一定存在一个满足 ∣ai∣≤1018\vert a_i\vert \le 10^{18} 的解。

一个长为 nn 的数列 aa 的最大子区间和是 max⁡1≤i≤j≤n∑k=ijak\max\limits_{1\le i\le j\le n}\sum\limits_{k=i}^j a_k。

输入格式

多组数据,第一行一个整数为数据组数 t(1≤t≤104)t(1\le t\le 10^4)。

对于每组数据,第一行两个整数 n,k(1≤n≤2×105,1≤k≤1012)n,k(1\le n\le 2\times 10^5,1\le k\le 10^{12})。
第二行为一个长为 nn 的 01 字符串 ss。
第三行 nn 个整数 a1,a2,⋯ ,an(∣ai∣≤106)a_1,a_2,\cdots,a_n(\vert a_i\vert\le 10^6)。保证 si=0s_i=0 时 ai=0a_i=0。

保证一个测试点中 ∑n≤2×105\sum n\le 2\times 10^5。

输出格式

对于每组数据,第一行一个字符串,如果有解输出 Yes,如果无解输出 No。大小写不敏感。

如果有解,第二行输出填充后的字符串 aa。你需要保证 ∣ai∣≤1018\vert a_i\vert\le 10^{18}。

如果有多种解法,输出任意一种均可。

输入输出样例

  • 输入#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

说明/提示

第一组数据中,向唯一丢失的 a1a_1 填充 44 得到 a=(4,0,1)a=(4,0,1),它的最大子区间和为 55。

第二组数据中,向唯一丢失的 a3a_3 填充 55 得到 a=(4,−3,5,−2,1)a=(4,-3,5,-2,1),它的最大子区间和为 66。

第三组数据中 a1a_1 和 a2a_2 待填充,向它们填充 22 得到 a=(2,2,−4,−5)a=(2,2,-4,-5),它的最大子区间和为 44。a=(0,4,−4,−5)a=(0,4,-4,-5) 也是一种解法。

对于第四组数据,没有合法的填充 aa 的方式。例如 a=(1,2,0,5,−1,9)a=(1,2,0,5,-1,9),它的最大子区间和为 1616 而非 1212。

By chenxi2009

输入解题思路,AI测评打分。不知道怎么写?

首页