$\huge \color{orange}{成仙之路->}$ $\huge \color{purple}{算法基础课题解}$
思路:
1. 将所有时间从小到大进行排序
2. 总等待时间 = 对于每个时间 * 在这个时间需要等待的人数
证明:
$假设\ t_i>t_{i+1}$
$交换前时间:t_i\cdot (n-i)+t_{i+1}\cdot (n-i-1)$
$交换后时间:t_{i+1}\cdot (n-i)+t_{i}\cdot (n-i-1)$
$前-后:t_i-t_{i+1}>0$
$因此,当对于越大的需要等待人数\ (n-i),时间\ t_i\ 越小越好$
完整代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010;
int n;
int t[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>t[i];
sort(t,t+n); //排序
LL res=0;
for(int i=0;i<n;i++) res+=t[i]*(n-i-1); //时间 * 等待人数
cout<<res<<endl;
return 0;
}