P3051题解

题目链接

这道题是思维+数学题,实现起来其实很简单.

我们先假设X[i]为i移到i+1的泥土数量. 我们因此可以得到以下式子:

然后我们从第一个土堆开始,注意土堆围成了一个环:

我们转换一下变为:

我们再枚举第二个:

我们可以把x[1]代入:

依次类推,我们列出通项:

令C[i] = B[i]-A[i],则通项转换为:

我们维护C[i]的前缀和S[i]表示C[1]~C[i]的和,我们就可以把式子转化为:

我们发现这些式子构成了一个绝对值不等式,而对于一个绝对值不等式当x[n]为S序列的中位数时和最小,这样x序列的和也就最小.

代码:

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,a[N],b[N],c[N],ans,mid;
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
	for(int i=1;i<=n;i++) c[i]=c[i-1]+a[i]-b[i];
	sort(c+1,c+n+1), mid=c[n/2+1];
	for(int i=1;i<=n;i++) ans+=abs(mid-c[i]);
	cout<<ans;
	return 0;
}
相关推荐
饼瑶21 小时前
基于AutoDL远端服务复现具身智能论文OpenVLA
算法
Mr.Winter`21 小时前
无人船 | 图解基于MPC控制的路径跟踪算法(以全驱动无人艇WAMV为例)
人工智能·算法·机器人·自动驾驶·ros·路径规划
咪咪渝粮21 小时前
112.路径总和
java·数据结构·算法
高洁0121 小时前
大模型-详解 Vision Transformer (ViT) (2
深度学习·算法·aigc·transformer·知识图谱
电子_咸鱼21 小时前
高阶数据结构——并查集
数据结构·c++·vscode·b树·python·算法·线性回归
Helibo4421 小时前
C++pair学习笔记
c++·笔记·学习
zl_dfq21 小时前
基于哈夫曼树的数据压缩算法
算法
多喝开水少熬夜21 小时前
算法-哈希表和相关练习-java
java·算法·散列表
@syh.1 天前
【C++】map和set
开发语言·c++
余衫马1 天前
聚类算法入门:像魔法一样把数据自动归类
人工智能·算法·机器学习·聚类