Aizhan 有一个由
Ermek 和 Aizhan 打算通过若干轮次来修改这个序列。在每一轮,Ermek 首先做一次交换,然后 Aizhan 做另一次交换。更确切地说,做交换的人选择两个有效的下标并交换这两个下标的元素。请注意这两个下标可能相同。如果它们相等,则对这个元素自身做交换,并不改变这个序列。
Aizhan 知道 Ermek 并不关心对序列
Aizhan 要对序列
请注意如果 Aizhan 发现在 Ermek 的交换之后,序列
样例一
设:
- 初始序列为
。 - Ermek 打算做
轮交换。 - Ermek打算选择的下标序列
和 分别是 和 。换句话说,Ermek 打算交换的下标对是 和 。
按照上述设定,Aizhan 能够通过三轮排序,将序列
下表给出了 Ermek 和 Aizhan 修改这个序列的过程。
轮次 | 操作者 | 交换的下标对 | 序列 |
---|---|---|---|
初态 | |||
0 | Ermek | ||
0 | Aizhan | ||
1 | Ermek | ||
1 | Aizhan | ||
2 | Ermek | ||
2 | Aizhan |
样例二
设:
- 初始序列为
。 - Ermek 打算做
轮交换。 - Ermek 打算交换的下标对是
和 。
按照上述设定,Aizhan 能够通过三轮完成对序列
轮次 | 操作者 | 交换的下标对 | 序列 |
---|---|---|---|
初态 | |||
0 | Ermek | ||
0 | Aizhan | ||
1 | Ermek | ||
1 | Aizhan | ||
2 | Ermek | ||
2 | Aizhan |
任务
给定序列
你需要实现函数 findSwapPairs:
- findSwapPairs(N, S, M, X, Y, P, Q) — grader调用这个函数刚好一次。
- N: 序列
的长度. - S: 一个整数数组,表示初始序列
。 - M: Ermek 打算做交换的次数。
- X, Y: 长度为
的整数数组. 对于 , 在第 轮 Ermek 打算交换下标为 和 的数组。 - P, Q: 整数数组。利用这两个数组报告 Aizhan 完成对序列
排序的一种可能的交换序列,假设这个交换序列的长度为 ,对于 到 之间的每个 ,Aizhan在轮次 选择的下标将被存入 和 。 你可以假设数组 和 均已分别被分配了 个元素。- 这个函数应返回
的值(定义如上)。
- 这个函数应返回
- N: 序列
子任务
子任务 | 得分 | 对 |
|||
---|---|---|---|---|---|
1 | 8 | ||||
2 | 12 | ||||
3 | 16 | ||||
4 | 18 | 无 | |||
5 | 20 | 无 | 最小 | ||
6 | 26 | 无 | 最小 |
数据保证存在一个仅需
实现细节
你只能提交一个源文件实现如上所述的 findSwapPairs 函数,并且遵循下面的命名和接口。你需要包含头文件 sorting.h。
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]);
评测方式
评测系统将读入如下格式的输入数据:
- 第
行: - 第
行: - 第
行: - 第
行:
评测系统将按下列格式输出:
- 第
行:findSwapPairs 函数的返回值 - 第
行:
时间限制:
空间限制: