欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF1216B.Shooting
Shooting
题目描述
最近,Vasya 决定提升自己的手枪射击技能。今天他的教练给他布置了如下练习:他在桌子上按顺序摆放了 个易拉罐,编号从左到右依次为 到 。Vasya 需要将每个易拉罐恰好击倒一次,才能完成练习。他可以自由选择击倒易拉罐的顺序。
Vasya 知道第 个易拉罐的耐久度为 。这意味着,如果 Vasya 已经击倒了 个易拉罐,现在准备开始射击第 个易拉罐,他需要用 次射击才能将其击倒。你可以假设 Vasya 一旦开始射击某个易拉罐,就会一直射击直到将其击倒。
你的任务是选择一种击倒易拉罐的顺序,使得击倒所有 个易拉罐所需的总射击次数最少。
输入格式
输入的第一行包含一个整数 ,表示易拉罐的数量,。
第二行包含 ,其中 表示第 个易拉罐的耐久度,。
输出格式
第一行输出击倒所有 个易拉罐所需的最少射击次数。
第二行输出 个互不相同的整数,表示最优的击倒顺序(即易拉罐的编号)。如果有多种最优方案,可以输出任意一种。
说明/提示
在第一个样例中,Vasya 可以先击倒第一个易拉罐。由于之前没有击倒任何易拉罐,他只需射击 次即可击倒它。之后,他可以击倒第三个易拉罐,需要射击 次。最后只剩下第二个易拉罐,需要射击 次。因此总共需要 次射击。
在第二个样例中,由于所有易拉罐的耐久度相同,击倒顺序不会影响总射击次数。
由 ChatGPT 4.1 翻译
样例
3
20 10 20
43
1 3 2
4
10 10 10 10
64
2 1 4 3
6
5 4 5 4 4 5
69
6 1 3 5 2 4
2
1 4
3
2 1
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |