AcWing 913. 排队打水
原题链接
简单
作者:
满目星河_0
,
2021-04-09 10:47:49
,
所有人可见
,
阅读 192
前缀和实现(便于理解)
//算法思想:1.先将输入的数组从小到大排列(贪心思想)
//2.求数组的前缀和,发现总共的等待时间刚好是前缀和的前n-1项的和。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100010;
typedef long long LL;
int a[N],s[N];//s数组表示前缀和
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);//注意用sort排序时下标从1开始的时候对应传的参数要加1
for(int i=1;i<=n;i++) s[i]+=s[i-1]+a[i];
LL res=0;
//前缀和往前错一位刚好就是所有人的等待时间,也就是前n-1项的和。
for(int i=1;i<=n-1;i++) res+=s[i];
cout<<res;
return 0;
}