P3051题解

题目链接

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

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

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

我们转换一下变为:

我们再枚举第二个:

我们可以把x1代入:

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

令Ci = Bi-Ai,则通项转换为:

我们维护Ci的前缀和Si表示C1~Ci的和,我们就可以把式子转化为:

我们发现这些式子构成了一个绝对值不等式,而对于一个绝对值不等式当xn为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;
}
相关推荐
@三十一Y41 分钟前
C++:AVL树实现
c++
ShineWinsu1 小时前
对于Linux:传输层协议UDP原理的解析
linux·c++·面试·udp·协议·传输层·计算机系统
LingzhiPi1 小时前
零知派ESP32--AS5600磁吸旋钮音量控制器
c++·单片机·嵌入式硬件
小保CPP2 小时前
OpenCV C++车型识别1-图像预处理
c++·人工智能·opencv·计算机视觉
库克克2 小时前
【C++】C++11 包装器function 与 绑定器 bind
开发语言·c++
小小龙学IT2 小时前
C++ Placement New 与显式析构:手动对象生命周期管理的艺术
c++·windows·mfc
Gauss松鼠会2 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
oier_Asad.Chen2 小时前
【洛谷题解/AcWing题解】洛谷P4011 孤岛营救问题/AcWing1131拯救大兵瑞恩
数据结构·笔记·学习·算法·动态规划·图论·宽度优先
小保CPP3 小时前
OpenCV C++车型识别2-形状匹配
c++·人工智能·opencv·计算机视觉
逻辑君3 小时前
基于 A2C 算法的双足机器人行走控制
人工智能·深度学习·算法·机器学习·机器人