题目描述:
乐乐是个笨小孩,学习知识点很慢,他现在要学习n门课程,每门课程有Ci个知识点,他学习每个知识点都需要花x个小时。
但是当他学完一门课程时,他的智商就会提高,学接下来那门课的每个知识点所花的时间,就会比上门课少一个小时。当然不可能无限制的减少,每个知识点至少需要1个小时。
小C要教乐乐这n门课,请你帮他安排一下顺序,能让乐乐尽快学完。
输入格式:
第一行两个整数n和x,表示总的科目数,和乐乐学每个知识点要花的时间。
第二行,n个数,表示每门课所包含的知识点数。
输出格式:
输出最少要花的时间。
样例输入:
样例1: 2 3 4 1 样例2: 4 2 5 1 2 1
样例输出:
样例1: 11 样例2: 10
提示:
样例1解释,先学习第二门课,所花的时间是3*1,学习完后,学习知识点的时间变为2,再学习第一门的时间是2*4,所以中的时间是11。
对于60%的数据,n的范围[1,1000];
对于100%的数据,n的范围[1,10^5],x的范围[1,1000],每门课的知识点个数范围[1,10^5];
时间限制: 1000ms
空间限制: 128MB
注意:本题需要用long long 类型,否则会出错。
代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100001]={};
int main(){
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
long long s=0;
for(int i=0;i<n;i++){
s=s+a[i]*m;
m--;
if(m<=0) m=1;
}
cout<<s;
return 0;
}