CF2033E.Sakurako, Kosuke, and the Permutation
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
樱子的考试结束了,她表现得非常出色。作为奖励,她收到了一个排列 p。小助因为有一门考试没及格,没有收到礼物,感到很不满。他决定偷偷溜进她的房间(多亏了她门锁的密码),把排列“破坏”成一个简单排列。
一个排列 p 被称为简单排列,当且仅当对于每个 i(1≤i≤n),满足以下两个条件之一:
- pi=i
- ppi=i
例如,排列 [1,2,3,4]、[5,2,4,3,1] 和 [2,1] 是简单排列,而 [2,3,1] 和 [5,2,1,4,3] 不是。
每次操作,小助可以选择两个下标 i,j(1≤i,j≤n),交换 pi 和 pj 的值。
樱子马上就要回家了。你的任务是计算小助最少需要进行多少次操作,才能将排列变成简单排列。
输入格式
第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。
每个测试用例包含两行。
- 第一行包含一个整数 n(1≤n≤106),表示排列 p 的长度。
- 第二行包含 n 个整数 pi(1≤pi≤n),表示排列 p 的元素。
保证所有测试用例中 n 的总和不超过 106。
保证 p 是一个排列。
输出格式
对于每个测试用例,输出一个整数,表示小助将排列变为简单排列所需的最小操作次数。
输入输出样例
输入#1
6 5 1 2 3 4 5 5 5 4 3 2 1 5 2 3 4 5 1 4 2 3 4 1 3 1 3 2 7 2 3 1 5 6 7 4
输出#1
0 0 2 1 0 2
说明/提示
在第一个和第二个样例中,排列已经是简单排列。
在第四个样例中,只需交换 p2 和 p4,排列就会变为 [2,1,4,3],只需 1 次操作。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?