专栏文章

题解:B4103 [CSP-X2023 山东] 代价

B4103题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miq95o6v
此快照首次捕获于
2025/12/04 00:59
3 个月前
此快照最后确认于
2025/12/04 00:59
3 个月前
查看原文

题目思路:

这道题乍一看很难,心想:“还是做别的吧”,其实仔细读完后还是挺简单的。算法主要考察的是对前缀和的使用。
用一个 ss 来存计算的前缀和,一个 tt 来计算代价, 公式前半部分是对代价的计算,后半部分是计算第二种的代价。最后求 resrestt 的最小值即可。

AC code

CPP
#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;
}

最后感谢大佬@cxoi1711提供的思路。

评论

0 条评论,欢迎与作者交流。

正在加载评论...