CF2001B.Generate Permutation
入门
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
有一个长度为 n 的整数序列 a,其中每个元素初始为 −1。
Misuki 有两台打字机,第一台从左到右写字,指针初始指向 1;第二台从右到左写字,指针初始指向 n。
Misuki 会选择其中一台打字机,并使用它执行以下操作,直到 a 变成 [1,2,…,n] 的一个排列:
- 写数字:将当前数组 a 中未出现的最小正整数写入 ai,其中 i 是指针当前指向的位置。只有当 ai=−1 时才能进行此操作。
- 回车:将指针返回到初始位置(即第一台打字机返回到 1,第二台打字机返回到 n)。
- 移动指针:将指针移动到下一个位置。设指针当前指向 i,若使用第一台打字机,则 i:=i+1,否则 i:=i−1。只有当操作后 1≤i≤n 时才能进行此操作。
你的任务是构造一个长度为 n 的排列 p,使得无论 Misuki 使用哪一台打字机,将 a 变为 p 所需的最小回车操作次数都相同。如果无法做到,输出 −1。
如果有多个满足条件的排列,可以输出任意一个。
输入格式
每个测试点包含多组测试数据。输入的第一行为一个整数 t(1≤t≤500),表示测试数据组数。
每组测试数据的第一行为一个整数 n(1≤n≤2×105),表示排列的长度。
保证所有测试数据中 n 的总和不超过 2×105。
输出格式
对于每组测试数据,输出一行 n 个整数,表示长度为 n 的排列 p,使得无论 Misuki 使用哪台打字机,将 a 变为 p 所需的最小回车次数都相同。如果不存在这样的排列,输出 −1。
如果有多个满足条件的排列,可以输出任意一个。
输入输出样例
输入#1
3 1 2 3
输出#1
1 -1 3 1 2
说明/提示
在第一个测试点,可以通过 0 次回车操作将 a=p=[1]。
在第二个测试点,可以通过如下方式将 a=p=[1,2]:
如果 Misuki 使用第一台打字机:
- 写数字:将 1 写入 a1,a 变为 [1,−1]。
- 移动指针:指针移动到下一个位置(即 2)。
- 写数字:将 2 写入 a2,a 变为 [1,2]。
如果 Misuki 使用第二台打字机:
- 移动指针:指针移动到下一个位置(即 1)。
- 写数字:将 1 写入 a1,a 变为 [1,−1]。
- 回车:指针返回到 2。
- 写数字:将 2 写入 a2,a 变为 [1,2]。
可以证明,使用第一台打字机时最小回车次数为 0,使用第二台打字机时为 1,因此该排列不合法。
同理,p=[2,1] 也不合法,所以 n=2 时无解。
在第三个测试点,可以通过 1 次回车操作将 a=p=[3,1,2],且两台打字机都需要 1 次回车。可以证明,对于两台打字机,都无法通过 0 次回车写出 p。
使用第一台打字机的操作如下:
- 移动指针:指针移动到下一个位置(即 2)。
- 写数字:将 1 写入 a2,a 变为 [−1,1,−1]。
- 移动指针:指针移动到下一个位置(即 3)。
- 写数字:将 2 写入 a3,a 变为 [−1,1,2]。
- 回车:指针返回到 1。
- 写数字:将 3 写入 a1,a 变为 [3,1,2]。
使用第二台打字机的操作如下:
- 移动指针:指针移动到下一个位置(即 2)。
- 写数字:将 1 写入 a2,a 变为 [−1,1,−1]。
- 回车:指针返回到 3。
- 写数字:将 2 写入 a3,a 变为 [−1,1,2]。
- 移动指针:指针移动到下一个位置(即 2)。
- 移动指针:指针移动到下一个位置(即 1)。
- 写数字:将 3 写入 a1,a 变为 [3,1,2]。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?