场上被创死了。
思路
考虑一次操作会造成什么影响。
加入操作的是:
\[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";
}
标签:Minimize,题解,Sum,long,int,vector
From: https://www.cnblogs.com/JiaY19/p/18595356