这里故意把题目给说的很长来混淆视野的,实际上能够购买的肯定是无脑疯狂购买,如果不满足,就战个未来后面拿到了再来。问题就是,为什么是满足的时候就回去找呢?而不是一次性满足之后再回来或者其他莫名其妙的方案?我们这里至少要走一次,而我们是只要满足了自己所有的欠债就回去,那么一个不满足的我们只会走一次(走到头了,但是都处理了,这就是贪心的地方),满足了之后再也不会继续走了,相当于分批次的,一次性一劳永逸的解决问题 连续的不满足就累加起来,满足的时候反正也要走到第一个还没有处理过的不满足的地方
说白了还是题干吓人,代码有没有题干长都是个问题
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
vector<int> pos(n,0);
for(int r = 0;r < n;r++)
{
cin>>pos[r];
}
vector<int> delta(n,0);
for(int r = 0;r < n;r++)
{
cin>>delta[r];
}
int now = 0;
int need = 0;
int post = 0;
int ans = 0;
for(int r = 0;r < n;r++)
{
if(delta[r] > 0)
{
if(now < 0 && now + delta[r] >= 0)
{
ans += 2 * (pos[r] - pos[post]);
}
now += delta[r];
}
else
{
if(now >= 0 && now + delta[r] < 0)
{
post = r;
}
now += delta[r];
}
}
ans += pos[n - 1];
//除开回头路。。。。。。
cout<<ans<<'\n';
return 0;
}

京公网安备 11010502036488号