这里故意把题目给说的很长来混淆视野的,实际上能够购买的肯定是无脑疯狂购买,如果不满足,就战个未来后面拿到了再来。问题就是,为什么是满足的时候就回去找呢?而不是一次性满足之后再回来或者其他莫名其妙的方案?我们这里至少要走一次,而我们是只要满足了自己所有的欠债就回去,那么一个不满足的我们只会走一次(走到头了,但是都处理了,这就是贪心的地方),满足了之后再也不会继续走了,相当于分批次的,一次性一劳永逸的解决问题 连续的不满足就累加起来,满足的时候反正也要走到第一个还没有处理过的不满足的地方

说白了还是题干吓人,代码有没有题干长都是个问题

#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;
}