CF1216B.Shooting
入门
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
最近,Vasya 决定提升自己的手枪射击技能。今天他的教练给他布置了如下练习:他在桌子上按顺序摆放了 n 个易拉罐,编号从左到右依次为 1 到 n。Vasya 需要将每个易拉罐恰好击倒一次,才能完成练习。他可以自由选择击倒易拉罐的顺序。
Vasya 知道第 i 个易拉罐的耐久度为 ai。这意味着,如果 Vasya 已经击倒了 x 个易拉罐,现在准备开始射击第 i 个易拉罐,他需要用 (ai⋅x+1) 次射击才能将其击倒。你可以假设 Vasya 一旦开始射击某个易拉罐,就会一直射击直到将其击倒。
你的任务是选择一种击倒易拉罐的顺序,使得击倒所有 n 个易拉罐所需的总射击次数最少。
输入格式
输入的第一行包含一个整数 n,表示易拉罐的数量,2≤n≤1000。
第二行包含 a1,a2,…,an,其中 ai 表示第 i 个易拉罐的耐久度,1≤ai≤1000。
输出格式
第一行输出击倒所有 n 个易拉罐所需的最少射击次数。
第二行输出 n 个互不相同的整数,表示最优的击倒顺序(即易拉罐的编号)。如果有多种最优方案,可以输出任意一种。
输入输出样例
输入#1
3 20 10 20
输出#1
43 1 3 2
输入#2
4 10 10 10 10
输出#2
64 2 1 4 3
输入#3
6 5 4 5 4 4 5
输出#3
69 6 1 3 5 2 4
输入#4
2 1 4
输出#4
3 2 1
说明/提示
在第一个样例中,Vasya 可以先击倒第一个易拉罐。由于之前没有击倒任何易拉罐,他只需射击 1 次即可击倒它。之后,他可以击倒第三个易拉罐,需要射击 20⋅1+1=21 次。最后只剩下第二个易拉罐,需要射击 10⋅2+1=21 次。因此总共需要 1+21+21=43 次射击。
在第二个样例中,由于所有易拉罐的耐久度相同,击倒顺序不会影响总射击次数。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?