小欧拿到了一个长度为 n 的排列。她每次操作可以交换任意两个数。她希望在不超过 n-1 次操作后,使得不存在两个相邻的数都是奇数,也不存在两个相邻的数都是偶数。你能帮帮她吗? 所谓排列,即 1 到 n 组成的数组,每个数仅出现 1 次。
第一行输入一个正整数 n ,代表排列的长度。 第二行输入 n 个正整数 a_i ,代表小欧拿到的排列。 1≤ n ≤ 10^5
第一行输出一个整数 k ,代表交换的次数。 接下来的 k 行,每行输出两个正整数 a_i 和 a_j ,代表交换这两个数。 有多种方案时,输出任意合法方案即可。
3 3 1 2
1 1 2
考点:构造
数据规模 n ≤ 1e5 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:构造
本题切入点
按奇偶位置分组,把奇数放到奇数位、偶数放到偶数位,输出所需的相邻交换方案(任意合法解即可)。
不要求唯一答案,只需按规则造出一个合法解,常从边界/特殊情形入手。
思路框架(构造 通法 · 非本题专属)
实现要点:构造题不判最优,只判合法性,因此验证环节不能省。
复杂度:时间 O(n) | 空间 O(n)
该范式的通法易错点
对照本题
样例 1
3 / 3 1 21 / 1 2解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2023年OPPO秋招移动端岗笔试。