CF1553E.Permutation Shift

提高+/省选-

通过率:0%

时间限制:3.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

An identity permutation of length nn is an array [1,2,3,…,n][1, 2, 3, \dots, n].

We performed the following operations to an identity permutation of length nn:

  • firstly, we cyclically shifted it to the right by kk positions, where kk is unknown to you (the only thing you know is that 0≤k≤n−10 \le k \le n - 1). When an array is cyclically shifted to the right by kk positions, the resulting array is formed by taking kk last elements of the original array (without changing their relative order), and then appending n−kn - k first elements to the right of them (without changing relative order of the first n−kn - k elements as well). For example, if we cyclically shift the identity permutation of length 66 by 22 positions, we get the array [5,6,1,2,3,4][5, 6, 1, 2, 3, 4];
  • secondly, we performed the following operation at most mm times: pick any two elements of the array and swap them.

You are given the values of nn and mm, and the resulting array. Your task is to find all possible values of kk in the cyclic shift operation.

长度为 nn 的恒等排列是一个数组 [1,2,3,…,n][1, 2, 3, \dots, n]。

我们对长度为 nn 的恒等排列执行了以下操作:

  • 首先,将其向右循环移动 kk 个位置,其中 kk 是未知的(你唯一知道的是 0≤k≤n−10 \le k \le n - 1)。当一个数组向右循环移动 kk 个位置时,所得数组由原数组的最后 kk 个元素(不改变它们的相对顺序)构成前缀,再将原数组的前 n−kn - k 个元素(同样不改变这 n−kn - k 个元素之间的相对顺序)作为后缀拼接而成。例如,若将长度为 66 的恒等排列向右循环移动 22 个位置,则得到数组 [5,6,1,2,3,4][5, 6, 1, 2, 3, 4];
  • 其次,我们最多执行了 mm 次如下操作:任选数组中两个元素并交换它们。

你将获得 nn、mm 的值以及最终得到的数组。你的任务是找出循环移动操作中所有可能的 kk 值。

输入格式

The first line contains one integer tt (1≤t≤1051 \le t \le 10^5) — the number of test cases.

Each test case consists of two lines. The first line contains two integers nn and mm (3≤n≤3⋅1053 \le n \le 3 \cdot 10^5; 0≤m≤n30 \le m \le \frac{n}{3}).

The second line contains nn integers p1,p2,…,pnp_1, p_2, \dots, p_n (1≤pi≤n1 \le p_i \le n, each integer from 11 to nn appears in this sequence exactly once) — the resulting array.

The sum of nn over all test cases does not exceed 3⋅1053 \cdot 10^5.

第一行包含一个整数 tt(1≤t≤1051 \le t \le 10^5)—— 测试用例的数量。

每个测试用例由两行组成。第一行包含两个整数 nn 和 mm(3≤n≤3⋅1053 \le n \le 3 \cdot 10^5;0≤m≤n30 \le m \le \frac{n}{3})。

第二行包含 nn 个整数 p1,p2,…,pnp_1, p_2, \dots, p_n(1≤pi≤n1 \le p_i \le n,且 11 到 nn 中的每个整数在此序列中恰好出现一次)—— 所得数组。

所有测试用例的 nn 值之和不超过 3⋅1053 \cdot 10^5。

输出格式

For each test case, print the answer in the following way:

  • firstly, print one integer rr (0≤r≤n0 \le r \le n) — the number of possible values of kk for the cyclic shift operation;
  • secondly, print rr integers k1,k2,…,krk_1, k_2, \dots, k_r (0≤ki≤n−10 \le k_i \le n - 1) — all possible values of kk in increasing order.

对于每个测试用例,按以下方式输出答案:

  • 首先,输出一个整数 rr(0≤r≤n0 \le r \le n)—— 表示循环移位操作中可能的 kk 值的个数;
  • 然后,输出 rr 个整数 k1,k2,…,krk_1, k_2, \dots, k_r(0≤ki≤n−10 \le k_i \le n - 1)—— 所有可能的 kk 值,按升序排列。

输入输出样例

  • 输入#1

    4
    4 1
    2 3 1 4
    3 1
    1 2 3
    3 1
    3 2 1
    6 0
    1 2 3 4 6 5

    输出#1

    1 3
    1 0
    3 0 1 2
    0

说明/提示

Consider the example:

  • in the first test case, the only possible value for the cyclic shift is 33. If we shift [1,2,3,4][1, 2, 3, 4] by 33 positions, we get [2,3,4,1][2, 3, 4, 1]. Then we can swap the 33-rd and the 44-th elements to get the array [2,3,1,4][2, 3, 1, 4];
  • in the second test case, the only possible value for the cyclic shift is 00. If we shift [1,2,3][1, 2, 3] by 00 positions, we get [1,2,3][1, 2, 3]. Then we don't change the array at all (we stated that we made at most 11 swap), so the resulting array stays [1,2,3][1, 2, 3];
  • in the third test case, all values from 00 to 22 are possible for the cyclic shift:
    • if we shift [1,2,3][1, 2, 3] by 00 positions, we get [1,2,3][1, 2, 3]. Then we can swap the 11-st and the 33-rd elements to get [3,2,1][3, 2, 1];
    • if we shift [1,2,3][1, 2, 3] by 11 position, we get [3,1,2][3, 1, 2]. Then we can swap the 22-nd and the 33-rd elements to get [3,2,1][3, 2, 1];
    • if we shift [1,2,3][1, 2, 3] by 22 positions, we get [2,3,1][2, 3, 1]. Then we can swap the 11-st and the 22-nd elements to get [3,2,1][3, 2, 1];
  • in the fourth test case, we stated that we didn't do any swaps after the cyclic shift, but no value of cyclic shift could produce the array [1,2,3,4,6,5][1, 2, 3, 4, 6, 5].

考虑以下示例:

  • 在第一个测试用例中,循环移位的唯一可能值为 33。若将数组 [1,2,3,4][1, 2, 3, 4] 向右循环移位 33 个位置,得到 [2,3,4,1][2, 3, 4, 1];然后交换第 33 个与第 44 个元素,即可得到数组 [2,3,1,4][2, 3, 1, 4];
  • 在第二个测试用例中,循环移位的唯一可能值为 00。若将数组 [1,2,3][1, 2, 3] 向右循环移位 00 个位置,得到 [1,2,3][1, 2, 3];此时我们完全不进行交换(题目说明最多执行 11 次交换),因此最终数组仍为 [1,2,3][1, 2, 3];
  • 在第三个测试用例中,循环移位的所有可能值为 00 到 22:
    • 若将数组 [1,2,3][1, 2, 3] 向右循环移位 00 个位置,得到 [1,2,3][1, 2, 3];然后交换第 11 个与第 33 个元素,得到 [3,2,1][3, 2, 1];
    • 若将数组 [1,2,3][1, 2, 3] 向右循环移位 11 个位置,得到 [3,1,2][3, 1, 2];然后交换第 22 个与第 33 个元素,得到 [3,2,1][3, 2, 1];
    • 若将数组 [1,2,3][1, 2, 3] 向右循环移位 22 个位置,得到 [2,3,1][2, 3, 1];然后交换第 11 个与第 22 个元素,得到 [3,2,1][3, 2, 1];
  • 在第四个测试用例中,题目声明在循环移位后未执行任何交换操作,但不存在任何循环移位值能够将原数组变为 [1,2,3,4,6,5][1, 2, 3, 4, 6, 5]。

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

首页