欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF1492B.Card Deck
Card Deck
题目描述
你有一副包含 张牌的牌堆,你希望将其重新排列成一个新的牌堆。
每张牌的数值为 到 之间的某个整数,记为 。所有 两两不同。牌堆中的牌从下到上编号,即 表示最底下的牌, 表示最顶上的牌。
每一步操作,你可以选择一个整数 ,从原牌堆的顶部取出 张牌,保持它们的顺序,将它们放到新牌堆的顶部。你可以重复进行该操作,直到原牌堆为空。(具体操作可参考题目说明部分。)
我们定义一个牌堆的序为 。
给定原始牌堆,请输出通过上述操作能够得到的序最大的牌堆。输出新牌堆从底到顶的牌面数值。
如果有多种方案,输出任意一种即可。
输入格式
第一行包含一个整数 (),表示测试用例的数量。
每个测试用例的第一行包含一个整数 (),表示牌堆的大小。
第二行包含 个整数 (,且 时 ),表示从底到顶的牌面数值。
保证所有测试用例中 的总和不超过 。
输出格式
对于每个测试用例,输出一行,表示通过操作得到的序最大的牌堆,从底到顶输出牌面数值。
如果有多种方案,输出任意一种。
说明/提示
在第一个测试用例中,一种最优策略如下:
- 从 顶部取 张牌放到 顶部: 变为 , 变为 ;
- 再取 张牌放到 顶部: 变为 , 变为 ;
- 再取 张牌放到 顶部: 变为 , 变为 ;
- 再取 张牌放到 顶部: 变为空, 变为 。
最终, 的序为 $4^3 \cdot 4 + 4^2 \cdot 3 + 4^1 \cdot 2 + 4^0 \cdot 1 = 256 + 48 + 8 + 1 = 313$。
在第二个测试用例中,一种最优策略如下:
- 从 顶部取 张牌放到 顶部: 变为 , 变为 ;
- 再取 张牌放到 顶部: 变为空, 变为 。
最终, 的序为 $5^4 \cdot 5 + 5^3 \cdot 2 + 5^2 \cdot 4 + 5^1 \cdot 3 + 5^0 \cdot 1 = 3125 + 250 + 100 + 15 + 1 = 3491$。
在第三个测试用例中,一种最优策略如下:
- 从 顶部取 张牌放到 顶部: 变为 , 变为 ;
- 再取 张牌放到 顶部: 变为 , 变为 ;
- 再取 张牌放到 顶部: 变为空, 变为 。
最终, 的序为 $6^5 \cdot 6 + 6^4 \cdot 1 + 6^3 \cdot 5 + 6^2 \cdot 3 + 6^1 \cdot 4 + 6^0 \cdot 2 = 46656 + 1296 + 1080 + 108 + 24 + 2 = 49166$。
由 ChatGPT 4.1 翻译
样例
4
4
1 2 3 4
5
1 5 2 4 3
6
4 2 5 3 6 1
1
1
4 3 2 1
5 2 4 3 1
6 1 5 3 4 2
1
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |