Loading

[ARC189B] Minimize Sum 题解

场上被创死了。

思路

考虑一次操作会造成什么影响。

加入操作的是:

\[x_1,x_2,x_3,x_4 \]

它们会变成:

\[x_1,x_1+x_4-x_3,x_1+x_4-x_2,x_4 \]

发现没有什么规律。

考虑它们的差分序列:

\[x_1,x_4-x_3,x_3-x_2,x_2-x_1 \]

改变为交换 \(2,4\) 的差分。

那么修改就变成很简单的形式了。

奇偶分别排序即可。

Code

#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";
}
posted @ 2024-12-09 16:31  JiaY19  阅读(45)  评论(0)    收藏  举报