CFCF2163B.Siga ta Kymata

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

给定一个长度为 nn 的排列 pp,它包含了 11nn 每个整数各一次。同时,给定一个长度为 nn 的二进制字符串 ss,其中 si=0s_i = 0,对所有 1in1 \le i \le n 都成立。你可以最多进行 55 次如下操作:

  • 选择任意两个整数 llrr,满足 1lrn1 \le l \le r \le n。对于所有满足 l<i<rl < i < rmin(pl,pr)<pi<max(pl,pr)\min(p_l, p_r) < p_i < \max(p_l, p_r) 条件的 ii,将 sis_i 置为 11

你还给定了一个长度为 nn 的二进制字符串 xx。在操作结束后,要求对于每一个 1in1 \le i \le n,如果 xi=1x_i = 1,则 sis_i 必须等于 11。注意,如果 xi=0x_i = 0,那么 sis_i 可以为任意值。

请找出至多 55 次操作的任意一个方案,使上述条件被满足。如果无法做到,输出不可能。你不需要让操作次数最少。

^\text{∗}排列 pp 是指由 11nn 组成的序列,每个元素各出现一次。

^\text{†}二进制字符串 bb 的定义是:对于所有 1im1 \le i \le mbib_i 只能是字符 0011

输入格式

每个测试点包含多个测试用例。第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例组数。接下来是每组测试用例的描述。

每组测试用例的第一行包含一个整数 nn3n21053 \le n \le 2 \cdot 10^5)——排列的大小。

第二行包含恰好 nn 个整数 p1,p2,,pnp_1, p_2, \ldots, p_n1pin1 \le p_i \le n,每个数字各出现一次),表示排列 pp

第三行包含一个长度为 nn 的二进制字符串 xx

保证所有测试用例中 nn 之和不超过 21052 \cdot 10^5

输出格式

对于每个测试用例,如果无法通过操作满足条件,输出 1-1

否则,输出一个整数 0k50 \le k \le 5,表示操作次数。接下来的 kk 行,每行输出两个整数 1lirin1 \le l_i \le r_i \le n,表示第 ii 次操作的区间。如果有多种方案,输出任意一种均可。

输入输出样例

  • 输入#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]p = [1, 2, 3]x=010x = 010。我们可以只进行一次操作,选择 l=1l = 1r=3r = 3。操作后,因为 l<2<rl < 2 < rmin(pl,pr)<p2=2<max(pl,pr)\min(p_l, p_r) < p_2 = 2 < \max(p_l, p_r) 成立,将 s2s_2 置为 11,最终 s=010s = 010

在第二个样例中,可以证明不存在不超过 55 次操作能满足条件,因此输出 1-1

在第三个样例中,p=[1,3,2,4,6,5]p = [1, 3, 2, 4, 6, 5]x=001100x = 001100。先对 l=1l = 1r=5r = 5 操作,此时 s=011100s = 011100。再对 l=2l = 2r=6r = 6 操作,ss 保持不变。最终 s=011100s = 011100 满足条件,因为 xx 中每个为 11 的位置,ss 对应位置也为 11

首页