欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF2001B.Generate Permutation
Generate Permutation
题目描述
有一个长度为 的整数序列 ,其中每个元素初始为 。
Misuki 有两台打字机,第一台从左到右写字,指针初始指向 ;第二台从右到左写字,指针初始指向 。
Misuki 会选择其中一台打字机,并使用它执行以下操作,直到 变成 的一个排列:
- 写数字:将当前数组 中未出现的最小正整数写入 ,其中 是指针当前指向的位置。只有当 时才能进行此操作。
- 回车:将指针返回到初始位置(即第一台打字机返回到 ,第二台打字机返回到 )。
- 移动指针:将指针移动到下一个位置。设指针当前指向 ,若使用第一台打字机,则 ,否则 。只有当操作后 时才能进行此操作。
你的任务是构造一个长度为 的排列 ,使得无论 Misuki 使用哪一台打字机,将 变为 所需的最小回车操作次数都相同。如果无法做到,输出 。
如果有多个满足条件的排列,可以输出任意一个。
输入格式
每个测试点包含多组测试数据。输入的第一行为一个整数 (),表示测试数据组数。
每组测试数据的第一行为一个整数 (),表示排列的长度。
保证所有测试数据中 的总和不超过 。
输出格式
对于每组测试数据,输出一行 个整数,表示长度为 的排列 ,使得无论 Misuki 使用哪台打字机,将 变为 所需的最小回车次数都相同。如果不存在这样的排列,输出 。
如果有多个满足条件的排列,可以输出任意一个。
说明/提示
在第一个测试点,可以通过 次回车操作将 。
在第二个测试点,可以通过如下方式将 :
如果 Misuki 使用第一台打字机:
- 写数字:将 写入 , 变为 。
- 移动指针:指针移动到下一个位置(即 )。
- 写数字:将 写入 , 变为 。
如果 Misuki 使用第二台打字机:
- 移动指针:指针移动到下一个位置(即 )。
- 写数字:将 写入 , 变为 。
- 回车:指针返回到 。
- 写数字:将 写入 , 变为 。
可以证明,使用第一台打字机时最小回车次数为 ,使用第二台打字机时为 ,因此该排列不合法。
同理, 也不合法,所以 时无解。
在第三个测试点,可以通过 次回车操作将 ,且两台打字机都需要 次回车。可以证明,对于两台打字机,都无法通过 次回车写出 。
使用第一台打字机的操作如下:
- 移动指针:指针移动到下一个位置(即 )。
- 写数字:将 写入 , 变为 。
- 移动指针:指针移动到下一个位置(即 )。
- 写数字:将 写入 , 变为 。
- 回车:指针返回到 。
- 写数字:将 写入 , 变为 。
使用第二台打字机的操作如下:
- 移动指针:指针移动到下一个位置(即 )。
- 写数字:将 写入 , 变为 。
- 回车:指针返回到 。
- 写数字:将 写入 , 变为 。
- 移动指针:指针移动到下一个位置(即 )。
- 移动指针:指针移动到下一个位置(即 )。
- 写数字:将 写入 , 变为 。
由 ChatGPT 4.1 翻译
样例
3
1
2
3
1
-1
3 1 2
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |