给定一个长度为 n 的二进制串 S(仅包含字符 0 和 1),以及 m 个非负整数 b1,b2,…,bm。
对于每个 bi,取其无前导零的二进制表示作为它的模式串;特别地,若 bi=0,则模式串定义为单个字符 0。
你需要判断是否能在 S 中选出 m 个互不相交的连续子串,使得第 i 个子串恰好等于 bi 的模式串。
约束条件:
第一行包含一个整数 T,表示测试用例的数量。
接下来每个测试用例按以下格式给出:
0 和 1。对于每个测试用例,输出一行:若存在满足条件的 m 个不相交区间则输出 YES,否则输出 NO。
输入
1
8 3
10101010
2 5 0
输出
YES
说明
二进制表示:b1=2 的模式串为 "10",b2=5 为 "101",b3=0 为 "0"。
在 S=10101010 中,我们可以选择区间 [3,5] 匹配 "101"(对应 b2),区间 [6,6] 匹配 "0"(对应 b3),区间 [7,8] 匹配 "10"(对应 b1)。
这三个区间互不相交,因此可以选出所需的 3 个子串,输出 YES。
输入
1
4 2
1010
5 2
输出
NO
说明
b1=5 的模式串为 "101",b2=2 为 "10"。S=1010。
"101" 只能出现在区间 [1,3]。若选用它,剩余字符为第 4 位的 "0",无法构成 "10"。
若不选 "101",两个 "10" 分别出现在 [1,2] 和 [3,4],只能选取其中一个,且无法再放入 "101"。
因此不存在互不相交的选取方案,输出 NO。
输入
1
10 4
0010110100
1 2 4 0
输出
YES
说明
模式串:b1=1 为 "1",b2=2 为 "10",b3=4 为 "100",b4=0 为 "0"。
S=0010110100 长度为 10。我们可以选择区间 [1,1] 作为 "0",[3,4] 作为 "10",[5,5] 作为 "1",[8,10] 作为 "100"。
这四个区间互不相交,满足所有数字的匹配要求,因此输出 YES。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册