专栏文章

[ARC189B] Minimize Sum 题解

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@miqu1xxb
此快照首次捕获于
2025/12/04 10:44
3 个月前
此快照最后确认于
2025/12/04 10:44
3 个月前
查看原文
场上被创死了。

思路

考虑一次操作会造成什么影响。
加入操作的是:
x1,x2,x3,x4x_1,x_2,x_3,x_4
它们会变成:
x1,x1+x4x3,x1+x4x2,x4x_1,x_1+x_4-x_3,x_1+x_4-x_2,x_4
发现没有什么规律。
考虑它们的差分序列:
x1,x4x3,x3x2,x2x1x_1,x_4-x_3,x_3-x_2,x_2-x_1
改变为交换 2,42,4 的差分。
那么修改就变成很简单的形式了。
奇偶分别排序即可。

Code

CPP
#include <bits/stdc++.h>
using namespace std;

#define int long long

int n;
int a[200010];

signed main() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = n; i >= 1; i--) a[i] = a[i] - a[i - 1];
  vector<int> ji;
  vector<int> ou;
  for (int i = 2; i <= n; i++) {
    if (i % 2 == 1) ji.push_back(a[i]);
    if (i % 2 == 0) ou.push_back(a[i]);
  }
  sort(ji.begin(), ji.end());
  sort(ou.begin(), ou.end());;
  int ns = a[1] * n;
  for (int i = 0; i < ji.size(); i++) {
    ns += (n - 2 * i - 2) * ji[i];
  }
  for (int i = 0; i < ou.size(); i++) {
    ns += (n - 2 * i - 1) * ou[i];
  }
  cout << ns << "\n";
}

评论

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

正在加载评论...