CF1530G.What a Reversal

NOI/NOI+/CTSC

通过率:0%

时间限制:2.00s

内存限制:512MB

AC君温馨提醒

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

题目描述

You have two strings aa and bb of equal length nn consisting of characters 0 and 1, and an integer kk.

You need to make strings aa and bb equal.

In one step, you can choose any substring of aa containing exactly kk characters 1 (and arbitrary number of characters 0) and reverse it. Formally, if a=a1a2…ana = a_1 a_2 \ldots a_n, you can choose any integers ll and rr (1≤l≤r≤n1 \le l \le r \le n) such that there are exactly kk ones among characters al,al+1,…,ara_l, a_{l+1}, \ldots, a_r, and set aa to a1a2…al−1arar−1…alar+1ar+2…ana_1 a_2 \ldots a_{l-1} a_r a_{r-1} \ldots a_l a_{r+1} a_{r+2} \ldots a_n.

Find a way to make aa equal to bb using at most 4n4n reversals of the above kind, or determine that such a way doesn't exist. The number of reversals doesn't have to be minimized.

你有两个长度均为 nn 的字符串 aa 和 bb,它们仅由字符 0 和 1 组成,以及一个整数 kk。

你需要使字符串 aa 和 bb 相等。

在每一步操作中,你可以选择 aa 的任意一个子串,该子串恰好包含 kk 个字符 1(可含任意数量的字符 0),并将其反转。形式化地说,若 a=a1a2…ana = a_1 a_2 \ldots a_n,则你可以任选整数 ll 和 rr(满足 1≤l≤r≤n1 \le l \le r \le n),使得在字符 al,al+1,…,ara_l, a_{l+1}, \ldots, a_r 中恰好有 kk 个 1,然后将 aa 替换为

a1a2…al−1  arar−1…al  ar+1ar+2…an.a_1 a_2 \ldots a_{l-1}\; a_r a_{r-1} \ldots a_l\; a_{r+1} a_{r+2} \ldots a_n.

请找出一种方法,在至多 4n4n 次上述类型的反转操作内使 aa 变为 bb;若不存在这样的方法,则判定其不可能。反转次数无需最小化。

输入格式

Each test contains multiple test cases. The first line contains the number of test cases tt (1≤t≤20001 \le t \le 2000). Description of the test cases follows.

Each test case consists of three lines. The first line of each test case contains two integers nn and kk (1≤n≤20001 \le n \le 2000; 0≤k≤n0 \le k \le n).

The second line contains string aa of length nn.

The third line contains string bb of the same length. Both strings consist of characters 0 and 1.

It is guaranteed that the sum of nn over all test cases does not exceed 20002000.

每个测试包含多个测试用例。第一行包含测试用例的数量 tt(1≤t≤20001 \le t \le 2000)。随后是各测试用例的描述。

每个测试用例由三行组成。每个测试用例的第一行包含两个整数 nn 和 kk(1≤n≤20001 \le n \le 2000;0≤k≤n0 \le k \le n)。

第二行包含一个长度为 nn 的字符串 aa。

第三行包含一个等长的字符串 bb。两个字符串均由字符 0 和 1 组成。

保证所有测试用例中 nn 的总和不超过 20002000。

输出格式

For each test case, if it's impossible to make aa equal to bb in at most 4n4n reversals, print a single integer −1-1.

Otherwise, print an integer mm (0≤m≤4n0 \le m \le 4n), denoting the number of reversals in your sequence of steps, followed by mm pairs of integers li,ril_i, r_i (1≤li≤ri≤n1 \le l_i \le r_i \le n), denoting the boundaries of the substrings of aa to be reversed, in chronological order. Each substring must contain exactly kk ones at the moment of reversal.

Note that mm doesn't have to be minimized. If there are multiple answers, print any.

对于每个测试用例,如果无法在至多 4n4n 次翻转操作内使 aa 等于 bb,则输出单个整数 −1-1。

否则,首先输出一个整数 mm(0≤m≤4n0 \le m \le 4n),表示你所构造的操作序列中翻转操作的次数;随后输出 mm 对整数 li,ril_i, r_i(1≤li≤ri≤n1 \le l_i \le r_i \le n),按时间顺序给出每次对字符串 aa 进行翻转操作的子串边界。每次翻转操作所作用的子串在执行翻转时必须恰好包含 kk 个 1。

注意:mm 不必是最小可能值。若存在多个合法答案,输出任意一个即可。

输入输出样例

  • 输入#1

    6
    6 1
    101010
    010101
    6 3
    101010
    010101
    6 0
    101010
    010101
    6 6
    101010
    010101
    4 2
    0000
    1111
    9 2
    011100101
    101001011

    输出#1

    3
    1 2
    3 4
    5 6
    1
    1 6
    -1
    -1
    -1
    5
    4 8
    8 9
    3 6
    1 4
    3 6

说明/提示

In the first test case, after the first reversal $a = $ 011010, after the second reversal $a = $ 010110, after the third reversal $a = $ 010101.

在第一个测试用例中,第一次翻转后 $a = $ 011010,第二次翻转后 $a = $ 010110,第三次翻转后 $a = $ 010101。

输入解题思路,AI测评打分。不知道怎么写?

首页