1 条题解
-
0
好的,下面是 B. 生成排列 的详细题解。
题目理解
有一个长度为 的数组 ,初始全是 。
两台打字机:- 第一台:指针初始在 ,只能向右移动,回车回到 。
- 第二台:指针初始在 ,只能向左移动,回车回到 。
写数字的规则固定:每次写当前不在 中的最小正整数。
因此数字 会按这个顺序被写入数组。我们需要构造一个排列 ,使得两台打字机写出 所需的最少回车次数相等。
1. 最少回车次数的计算
设 表示数字 在 中的位置()。
第一台打字机(从左到右)
- 写 时,指针必须在 。
- 写完 后要写 :
- 若 ,指针可直接右移,不需要回车。
- 若 ,指针无法左移,必须先回车到 ,再右移到 ,需要 次回车。
因此:
即位置序列 中下降的次数。
第二台打字机(从右到左)
- 写 时,指针必须在 。
- 写完 后要写 :
- 若 ,指针可直接左移,不需要回车。
- 若 ,指针无法右移,必须先回车到 ,再左移到 ,需要 次回车。
因此:
即位置序列中上升的次数。
2. 关键等式
对于每一对相邻值 ,由于 ,要么 ,要么 。
所以:这是一个常数。
要求 ,代入得:
3. 解的可行性
-
当 为偶数时, 不是整数,不可能有 。
因此输出 。 -
当 为奇数时,有解,且我们需要构造一个排列,使得位置序列中恰好有 次上升和 次下降。
4. 构造方法
标程给出的构造(以 为例):
一般形式:
$$p = [n-1,\ n,\ n-3,\ n-2,\ n-5,\ n-4,\ \dots,\ 4,5,2,3,1] $$验证 的情况
- 位置:
- 位置序列:
- 比较:
- (下降)
- (上升)
- (下降)
- (上升)
- 上升次数 ,下降次数 ,,满足条件。
为什么这个构造有效?
- 它把较大的数交替放在两端,较小的数放在中间。
- 位置序列会自然产生交替的上升和下降,且上升和下降次数相等。
- 最后一个元素是 ,保证最后一步是上升或下降的边界处理正确。
5. 算法步骤
对于每个测试用例:
- 如果 是偶数,输出 。
- 如果 是奇数,按上述模式构造排列并输出。
6. 时间复杂度
每个测试用例 构造, 输出。
总 之和不超过 ,因此总复杂度 。
7. 总结
- 核心转化:回车次数 和 分别等于位置序列的下降次数和上升次数。
- 由 得 当且仅当 为奇数。
- 构造方法简单,直接按模式填充即可。
- 1
信息
- ID
- 6272
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者