AcWing 4262. 空调
原题链接
简单
作者:
网名什么的不重要啦
,
2024-03-27 21:29:59
,
所有人可见
,
阅读 1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
ll n,m;
const int N = 1e5+10;
ll a[N],b[N];
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
{
cin >> a[i];
}
for(int i = 1;i<=n;i++)
{
ll x;
cin >> x;
b[i] = a[i] - x;
}
ll cnt = abs(b[1]); //如果连续就可以拆成两个,只用管b[i] 和 b[i - 1]
//判断他们是否 同时要加,同时要减
// 如果b[i]>0 b[i-1]<=0 ,毫无疑问 要补abs(b[i]);
// 如果他们俩同时>0||<0 //从左边传过来的看是否大于b[i]需要的
//不够就补
ll t = abs(b[1]);
for(int i=2;i<=n;i++)
{
if(b[i-1]==0)
{
t = abs(b[i]);
cnt+=abs(b[i]);
}
else
{
if(b[i]==0) t = abs(0);
if(b[i]>0&&b[i-1]>0)
{
if(t>=abs(b[i]))
{
t = abs(b[i]);
}
else
{
cnt+=abs(b[i]) - t;
t = abs(b[i]);
}
}
else if(b[i]>0&&b[i-1]<0)
{
cnt+=abs(b[i]);
t = abs(b[i]);
}
else if(b[i]<0&&b[i-1]>0)
{
cnt+=abs(b[i]);
t = abs(b[i]);
}
else if(b[i]<0&&b[i-1]<0)
{
if(t>=abs(b[i]))
{
t = abs(b[i]);
}
else
{
cnt+=abs(b[i]) - t;
t = abs(b[i]);
}
}
}
}
cout<<cnt<<endl;
return 0;
}