题解:B4103 [CSP-X2023 山东] 代价
题目思路:
这道题乍一看很难,心想:“还是做别的吧”,其实仔细读完后还是挺简单的。算法主要考察的是对前缀和的使用。
用一个
AC code
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int n, a, b, t , res = LLONG_MAX;
int x[100001], s[100001];
signed main()
{
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(false);
cin >> n >> a >> b;
for(int i = 1; i <= n; i++){
cin >> x[i];
}
sort(x + 1 ,x + 1 + n);
//前缀和的计算
for(int i = 1; i <= n; i++){
s[i] = s[i-1] + x[i];
}
//结果部分
for(int i = 1; i <= n; i++){
t = ((i - 1) * x[i] - s[i - 1]) * a + (s[n] - s[i] - (n - i) * x[i]) * b;
res = min (res , t);
}
cout << res << endl;
return 0;
}