CF441D.Valera and Swaps

提高+/省选-

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

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

题目描述

A permutation p of length n is a sequence of distinct integers _p_1, _p_2, ..., p__n (1 ≤ p__i ≤ n). A permutation is an identity permutation, if for any i the following equation holds p__i = i.

A swap (i, j) is the operation that swaps elements p__i and p__j in the permutation. Let's assume that f(p) is the minimum number of swaps that you need to make the permutation p an identity permutation.

Valera wonders, how he can transform permutation p into any permutation q, such that f(q) = m, using the minimum number of swaps. Help him do that.

长度为 nn 的一个排列 pp 是由互不相同的整数 p1, p2, …, pnp_1,\,p_2,\,\dots,\,p_n(其中 1≤pi≤n1\le p_i\le n)构成的序列。若对任意 ii 均有 pi=ip_i = i,则称该排列为恒等排列。

交换操作 (i, j)(i,\,j) 表示将排列中位置 ii 和 jj 上的元素 pip_i 与 pjp_j 互换。记 f(p)f(p) 为将排列 pp 变为恒等排列所需的最少交换次数。

瓦列拉想知道:如何通过最少次数的交换操作,将排列 pp 变为某个排列 qq,使得 f(q)=mf(q) = m?请你帮助他实现这一目标。

输入格式

The first line contains integer n (1 ≤ n ≤ 3000) — the length of permutation p. The second line contains n distinct integers _p_1, _p_2, ..., p__n (1 ≤ p__i ≤ n) — Valera's initial permutation. The last line contains integer m (0 ≤ m < n).

第一行包含一个整数 nn(1≤n≤30001 \leq n \leq 3000)—— 排列 pp 的长度。
第二行包含 nn 个互不相同的整数 p1,p2,…,pnp_1, p_2, \dots, p_n(1≤pi≤n1 \leq p_i \leq n)—— Valera 的初始排列。
最后一行包含一个整数 mm(0≤m<n0 \leq m < n)。

输出格式

In the first line, print integer k — the minimum number of swaps.

In the second line, print 2_k_ integers _x_1, _x_2, ..., x_2_k — the description of the swap sequence. The printed numbers show that you need to consecutively make swaps (_x_1, _x_2), (_x_3, _x_4), ..., (x_2_k - 1, x_2_k).

If there are multiple sequence swaps of the minimum length, print the lexicographically minimum one.

第一行输出整数 kk —— 最少交换次数。

第二行输出 2k2k 个整数 x1, x2, …, x2kx_1,\,x_2,\,\dots,\,x_{2k} —— 交换序列的描述。所输出的数字表示需依次执行交换 (x1, x2), (x3, x4), …, (x2k−1, x2k)(x_1,\,x_2),\,(x_3,\,x_4),\,\dots,\,(x_{2k-1},\,x_{2k})。

若存在多个长度最小的交换序列,请输出字典序最小的一个。

输入输出样例

  • 输入#1

    5
    1 2 3 4 5
    2

    输出#1

    2
    1 2 1 3
  • 输入#2

    5
    2 1 4 5 3
    2

    输出#2

    1
    1 2

说明/提示

Sequence _x_1, _x_2, ..., x__s is lexicographically smaller than sequence _y_1, _y_2, ..., y__s, if there is such integer r (1 ≤ r ≤ s), that _x_1 = _y_1, _x_2 = _y_2, ..., x__r - 1 = y__r - 1 and x__r < y__r.

序列 x1,x2,…,xsx_1, x_2, \dots, x_s 在字典序上小于序列 y1,y2,…,ysy_1, y_2, \dots, y_s,当且仅当存在某个整数 rr(1≤r≤s1 \le r \le s),使得 x1=y1, x2=y2, …, xr−1=yr−1x_1 = y_1,\, x_2 = y_2,\, \dots,\, x_{r-1} = y_{r-1},且 xr<yrx_r < y_r。

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

首页