#CF2136B. 类位集思想
类位集思想
题目描述
给定一个长度为 的二进制字符串 ,以及一个整数 。
你需要构造一个长度为 的排列 ,满足:对于每个满足 的位置 (),以下条件必须成立:
对于每一个长度至少为 (即 )且包含位置 (即 )的区间 (),区间内的最大值不能是 。
对于 的位置,没有任何限制。
请你构造出满足条件的排列,或者判断不存在这样的排列。
名词解释
- 二进制字符串:仅由字符 和 组成的字符串。
- 排列:长度为 的排列是一个由 这 个互不相同的整数组成的数组。
输入格式
每个测试点包含多组测试数据。 第一行输入测试数据组数 ()。
每组测试数据: 第一行输入两个整数 (,)。 第二行输入长度为 的二进制字符串 。
保证所有测试数据的 之和不超过 。
输出格式
对于每组测试数据:
- 如果存在合法排列:
第一行输出
YES; 第二行输出 个整数 (,所有数字互不相同)。 - 否则,仅输出一行
NO。
你可以以任意大小写形式输出 YES/NO。
如果存在多个答案,输出任意一个合法答案即可。
样例输入
6
2 1
00
4 3
0010
5 2
11011
7 5
1111110
8 4
00101011
10 2
1000000010
样例输出
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
样例解释
- 第一组测试数据:所有 ,无任何限制,输出任意排列均可。
- 第二组测试数据:唯一的 位置是 。所有长度 且包含 的区间最大值都不是 ,因此合法。