CF2136B.Like the Bitset
入门
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个长度为 n 的二进制字符串 s,以及一个整数 k。
Aquawave 想要构造一个长度为 n 的排列 p,使得对于所有 1≤i≤n 且 si=1 的下标 i,满足如下条件:
- 对于每一个长度不少于 k 的区间 [l,r](即 r−l+1≥k)且覆盖位置 i(即 l≤i≤r),该区间内的最大元素 pl,pl+1,…,pr 中,最大值不能等于 pi。
注意,对于 si=0 的下标 i 没有上述限制。
请你找出这样一个排列,或者判断不存在这样的排列。
∗ 二进制字符串指的是每个字符都是 0 或 1 的字符串。
† 长度为 n 的排列是一个由 n 个互不相同的 1 到 n 的整数构成的数组,例如 [2,3,1,5,4] 是一个排列,而 [1,2,2] 不是排列(2 出现了两次),[1,3,4] 也不是排列(长度为 3,但出现了 4)。
输入格式
每组测试数据包含多组测试用例。第一行输入一个整数 t(1≤t≤104),表示测试用例数量。
每个测试用例的第一行输入两个整数 n 和 k(1≤n≤2⋅105,1≤k≤n),分别表示字符串 s 的长度和给定的整数。
第二行输入一个长度为 n 的二进制字符串 s(si=0 或 1)。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
对于每组测试用例:
- 如果存在至少一个满足条件的排列,请:
- 在第一行输出 YES(大小写均可);
- 在第二行输出 n 个两两不同的整数 p1,p2,…,pn(1≤pi≤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=2 的排列,因为所有 si 都等于 0。
在第二个测试用例中,p=[1,4,3,2] 是一个合法解,因为:
- 唯一一个 si=1 的位置是 i=3,覆盖 3 且长度不少于 k=3 的区间共有三个,分别为 [1,3],[1,4] 和 [2,4];
- 对于这三个区间,每个区间的最大值都是 p2=4,显然最大值不等于 p3=3。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?