AcWing 4262. 空调
原题链接
简单
作者:
xyAC
,
2024-03-04 20:43:58
,
所有人可见
,
阅读 23
//这道题是通过将问题转化之后来进行计算的,先求出两个数组相差多少,然后构造差值数组的差分数组
// 然后就是将差分数组全部归0操作即可 每一次只能将一个正数+1对应着将一个负数-1这是一此操作
// 最后你会发现这样就是通过计算正数的和 因为位于N+1下标的值一定是负数对应着和正数进行操作
// 如果没有N+1那么就是获取正数和 和 负数和的最大值
#include <iostream>
using namespace std;
const int N = 100010;
int n,a[N];
int main(){
scanf("%d",&n);
for(int i = 1;i <= n;i++) scanf("%d",&a[i]);
for(int i = 1;i <= n;i++) {
int s;
scanf("%d",&s);
a[i] -= s;
}
// 本数组构造差分通过倒着来进行
for(int i = n+1;i;i--) a[i] -= a[i-1];
int res = 0;
// 遍历到n+1的时候可以通过判断正数的个数
for(int i = 1;i <= n+1;i++) {
if(a[i] > 0) res += a[i];
}
cout<<res<<endl;
return 0;
}