AT_xmascon16_d.Distributed Sorting
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
在 20XX 年,世界被 Distributed AtC◯der 公司统治,形成了一个反乌托邦社会。在这种背景下,人们唯一的娱乐活动就是以分布式和并行处理为主题的编程竞赛。这些比赛成为了社会生活的一部分,例如,周末全家通过 ssh 访问超级计算机已经成为非常常见的活动。
虽然下面的问题描述更接近并行处理而非真正的分布式处理,我们决定称之为分布式排序,因为标题中的 D 更加合适。此外,今天是圣诞节,我们不打算纠结这些琐事。
在分布式和并行处理的场景下,即便是一些看似基础的任务,也可以通过多种方式进行优化。例如,考虑将一个由 N 个不同整数组成的序列 X1,X2,…,XN 进行升序排序。
我们有一台机器,它可以进行以下操作:
- 操作:给出 2k 个不同的索引 A1,A2,…,A2k,机器会对每一个 i (1≤i≤k),交换 XA2i−1 和 XA2i 的值。这里,所有索引都必须满足 1≤Aj≤N。
例如,当 X=(5,3,1,2,4),若 k=2,并且操作中的索引为 (A1,A2,A3,A4)=(1,3),(2,4),那么执行操作后,序列会变为 (1,2,5,3,4)。
你的任务是编写一个程序,计算使用上述操作将序列 X 排序到升序所需的最小操作次数,并输出实现该最小操作次数的一组操作步骤。
输入格式
输入从标准输入中给出,格式如下:
N X1 X2 … XN
输出格式
首先输出一个整数,表示将序列 X 升序排序所需的最小操作次数。接下来的每一行输出一种具体的操作步骤。
每行先输出交换操作的对数 k,然后再列出 2k 个整数 A1,A2,…,A2k,这些数之间用空格隔开。
输入输出样例
输入#1
3 2 3 1
输出#1
2 1 1 3 1 2 3
输入#2
3 1 2 3
输出#2
0
输入#3
5 5 4 3 2 1
输出#3
1 2 1 5 2 4
说明/提示
- 1≤N≤105。
- 1≤Xi≤109。
- Xi 是互不相同的整数。
示例说明
只要满足最小操作次数并能正确升序排序,其他输出也是合格的。例如,对于给定输入示例,输出 2 1 1 2 1 3 1 也是正确的。
本翻译由 AI 自动生成
输入解题思路,AI测评打分。不知道怎么写?