CF2136B.Like the Bitset

入门

通过率:0%

AC君温馨提醒

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

题目描述

给定一个长度为 nn 的二进制字符串 ss,以及一个整数 kk。

Aquawave 想要构造一个长度为 nn 的排列 pp,使得对于所有 1≤i≤n1 \le i \le n 且 si=1s_i = \mathtt{1} 的下标 ii,满足如下条件:

  • 对于每一个长度不少于 kk 的区间 [l,r][l, r](即 r−l+1≥kr - l + 1 \geq k)且覆盖位置 ii(即 l≤i≤rl \leq i \leq r),该区间内的最大元素 pl,pl+1,…,prp_l, p_{l+1}, \ldots, p_r 中,最大值不能等于 pip_i。

注意,对于 si=0s_i = \mathtt{0} 的下标 ii 没有上述限制。

请你找出这样一个排列,或者判断不存在这样的排列。

∗^{\text{∗}} 二进制字符串指的是每个字符都是 0\mathtt{0} 或 1\mathtt{1} 的字符串。

†^{\text{†}} 长度为 nn 的排列是一个由 nn 个互不相同的 11 到 nn 的整数构成的数组,例如 [2,3,1,5,4][2,3,1,5,4] 是一个排列,而 [1,2,2][1,2,2] 不是排列(22 出现了两次),[1,3,4][1,3,4] 也不是排列(长度为 33,但出现了 44)。

输入格式

每组测试数据包含多组测试用例。第一行输入一个整数 tt(1≤t≤1041 \le t \le 10^4),表示测试用例数量。

每个测试用例的第一行输入两个整数 nn 和 kk(1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5,1≤k≤n1 \leq k \leq n),分别表示字符串 ss 的长度和给定的整数。

第二行输入一个长度为 nn 的二进制字符串 ss(si=0s_i = \mathtt{0} 或 1\mathtt{1})。

保证所有测试用例的 nn 之和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每组测试用例:

  • 如果存在至少一个满足条件的排列,请:
    • 在第一行输出 YES(大小写均可);
    • 在第二行输出 nn 个两两不同的整数 p1,p2,…,pnp_1, p_2, \ldots, p_n(1≤pi≤n1 \leq p_i \leq n),即你构造的排列。
  • 否则输出 NO。

如果存在多组解,输出任意一组均可。

输入输出样例

  • 输入#1

    6
    2 1
    00
    4 3
    0010
    5 2
    11011
    7 5
    1111110
    8 4
    00101011
    10 2
    1000000010

    输出#1

    YES
    1 2
    YES
    1 4 3 2
    NO
    NO
    YES
    6 5 2 3 4 8 1 7
    YES
    1 2 3 4 5 6 7 9 8 10

说明/提示

在第一个测试用例中,你可以输出任意长度为 n=2n = 2 的排列,因为所有 sis_i 都等于 0\mathtt{0}。

在第二个测试用例中,p=[1,4,3,2]p=[1, 4, 3, 2] 是一个合法解,因为:

  • 唯一一个 si=1s_i = \mathtt{1} 的位置是 i=3i = 3,覆盖 33 且长度不少于 k=3k=3 的区间共有三个,分别为 [1,3][1, 3],[1,4][1, 4] 和 [2,4][2, 4];
  • 对于这三个区间,每个区间的最大值都是 p2=4p_2 = 4,显然最大值不等于 p3=3p_3 = 3。

由 ChatGPT 5 翻译

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

首页