CF1216B Shooting
题目描述
最近,Vasya 决定提升自己的手枪射击技能。今天他的教练给他布置了如下练习:他在桌子上按顺序摆放了 $n$ 个易拉罐,编号从左到右依次为 $1$ 到 $n$。Vasya 需要将每个易拉罐恰好击倒一次,才能完成练习。他可以自由选择击倒易拉罐的顺序。
Vasya 知道第 $i$ 个易拉罐的耐久度为 $a_i$。这意味着,如果 Vasya 已经击倒了 $x$ 个易拉罐,现在准备开始射击第 $i$ 个易拉罐,他需要用 $(a_i \cdot x + 1)$ 次射击才能将其击倒。你可以假设 Vasya 一旦开始射击某个易拉罐,就会一直射击直到将其击倒。
你的任务是选择一种击倒易拉罐的顺序,使得击倒所有 $n$ 个易拉罐所需的总射击次数最少。
输入格式
输入的第一行包含一个整数 $n$,表示易拉罐的数量,$2 \le n \le 1000$。
第二行包含 $a_1, a_2, \dots, a_n$,其中 $a_i$ 表示第 $i$ 个易拉罐的耐久度,$1 \le a_i \le 1000$。
输出格式
第一行输出击倒所有 $n$ 个易拉罐所需的最少射击次数。
第二行输出 $n$ 个互不相同的整数,表示最优的击倒顺序(即易拉罐的编号)。如果有多种最优方案,可以输出任意一种。
说明/提示
在第一个样例中,Vasya 可以先击倒第一个易拉罐。由于之前没有击倒任何易拉罐,他只需射击 $1$ 次即可击倒它。之后,他可以击倒第三个易拉罐,需要射击 $20 \cdot 1 + 1 = 21$ 次。最后只剩下第二个易拉罐,需要射击 $10 \cdot 2 + 1 = 21$ 次。因此总共需要 $1 + 21 + 21 = 43$ 次射击。
在第二个样例中,由于所有易拉罐的耐久度相同,击倒顺序不会影响总射击次数。
由 ChatGPT 4.1 翻译