CFCF2163B.Siga ta Kymata
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个长度为 n 的排列 p,它包含了 1 到 n 每个整数各一次。同时,给定一个长度为 n 的二进制字符串 s,其中 si=0,对所有 1≤i≤n 都成立。你可以最多进行 5 次如下操作:
- 选择任意两个整数 l 和 r,满足 1≤l≤r≤n。对于所有满足 l<i<r 且 min(pl,pr)<pi<max(pl,pr) 条件的 i,将 si 置为 1。
你还给定了一个长度为 n 的二进制字符串 x。在操作结束后,要求对于每一个 1≤i≤n,如果 xi=1,则 si 必须等于 1。注意,如果 xi=0,那么 si 可以为任意值。
请找出至多 5 次操作的任意一个方案,使上述条件被满足。如果无法做到,输出不可能。你不需要让操作次数最少。
∗排列 p 是指由 1 到 n 组成的序列,每个元素各出现一次。
†二进制字符串 b 的定义是:对于所有 1≤i≤m,bi 只能是字符 0 或 1。
输入格式
每个测试点包含多个测试用例。第一行包含一个整数 t(1≤t≤104),表示测试用例组数。接下来是每组测试用例的描述。
每组测试用例的第一行包含一个整数 n(3≤n≤2⋅105)——排列的大小。
第二行包含恰好 n 个整数 p1,p2,…,pn(1≤pi≤n,每个数字各出现一次),表示排列 p。
第三行包含一个长度为 n 的二进制字符串 x。
保证所有测试用例中 n 之和不超过 2⋅105。
输出格式
对于每个测试用例,如果无法通过操作满足条件,输出 −1。
否则,输出一个整数 0≤k≤5,表示操作次数。接下来的 k 行,每行输出两个整数 1≤li≤ri≤n,表示第 i 次操作的区间。如果有多种方案,输出任意一种均可。
输入输出样例
输入#1
6 3 1 2 3 010 5 3 4 2 1 5 11111 6 1 3 2 4 6 5 001100 6 6 2 3 4 5 1 110110 5 2 1 4 3 5 00000 5 2 5 3 1 4 00100
输出#1
1 1 3 -1 2 1 5 2 6 -1 0 1 2 4
说明/提示
在第一个样例中,p=[1,2,3],x=010。我们可以只进行一次操作,选择 l=1,r=3。操作后,因为 l<2<r 且 min(pl,pr)<p2=2<max(pl,pr) 成立,将 s2 置为 1,最终 s=010。
在第二个样例中,可以证明不存在不超过 5 次操作能满足条件,因此输出 −1。
在第三个样例中,p=[1,3,2,4,6,5],x=001100。先对 l=1 和 r=5 操作,此时 s=011100。再对 l=2 和 r=6 操作,s 保持不变。最终 s=011100 满足条件,因为 x 中每个为 1 的位置,s 对应位置也为 1。