欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF1611C.Polycarp Recovers the Permutation
Polycarp Recovers the Permutation
题目描述
Polycarp 在白板上写下了一个长度为 的数组 ,它是 到 的一个排列。换句话说,在 中,每个 到 的数字恰好出现一次。
他还准备了一个结果数组 ,初始时为空(即长度为 )。
接下来,他恰好进行了 步操作。每一步操作如下:
- 查看 的最左端和最右端元素,选择其中较小的一个。
- 如果选择了 的最左端元素,则将其添加到 的最左端;否则,如果选择了 的最右端元素,则将其添加到 的最右端。
- 被选中的元素从 中删除。
注意,在最后一步时, 只剩下一个元素,这个元素既是最左端也是最右端。在这种情况下,Polycarp 可以自由选择将其作为左端或右端处理。换句话说,这个元素可以被添加到 的左端或右端(由 Polycarp 决定)。
让我们看一个例子。设 ,。初始时 。然后:
- 第一步,最小值在右端(值为 ),操作后 ,(将 添加到右端)。
- 第二步,最小值在左端(值为 ),操作后 ,(将 添加到左端)。
- 第三步,最小值在左端(值为 ),操作后 ,(将 添加到左端)。
- 第四步,最小值既是左端也是右端(值为 )。假设 Polycarp 选择右端。操作后 ,(将 添加到右端)。
因此,经过 步操作后, 的一种可能取值为 。
现在给定最终得到的数组 ,请你找出任意一种可能的初始数组 ,使得经过上述过程后能得到给定的 ,或者判断无解。
输入格式
输入的第一行为一个整数 (),表示测试用例的数量。
每个测试用例包含两行。第一行为一个整数 (),表示数组 的长度。第二行为 个整数 (),表示数组 的元素。所有 中的元素互不相同。
保证所有测试用例中 的总和不超过 。
输出格式
输出 行,每行对应一个测试用例的答案:,表示任意一种可能的初始数组 ,使得经过上述过程后能得到给定的 。 必须是 到 的一个排列。如果无解,输出 。
说明/提示
样例中的第一个测试用例已在题目描述中详细说明。对于该测试用例,可能还有其他正确答案。
第二个测试用例中,。因此,唯一可能的排列为 。确实,这是该测试用例的答案。
第三个测试用例,无论选择什么排列 ,经过 步操作后,得到的结果都不会是 。
由 ChatGPT 4.1 翻译
样例
4
4
1 3 2 4
1
1
5
1 3 5 4 2
3
3 2 1
3 1 4 2
1
-1
2 3 1
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |