1 条题解

  • 0
    @ 2026-3-26 13:26:11

    解题思路 打开宝箱只有两种最优行走策略

    策略 1:先拿钥匙,再去宝箱。

    策略 2:先拿箱子,再去拿钥匙扛箱子行走受体力限制:

    若体力足够(宝箱钥匙距离 ≤k):直接扛箱子走到钥匙处;

    若体力不足:扛箱子走 k 秒后放下,空手往返剩余路程拿钥匙。

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long 
    int x,y,k,ans=1000;
    signed main(){
        cin>>x>>y>>k;
        //拿到0到箱子的距离 0到钥匙的距离 和箱子到钥匙的距离
        int nx=abs(x),ny=abs(y),d=abs(x-y);
        //先拿钥匙
        int timea=ny+d;
        //先拿箱子
        int timeb;
        if(d<=k){//可以抗箱子到拿钥匙
            timeb=nx+d;
        }
        else{//否则先拿到箱子 然后抗k距离 此时箱子与钥匙差d-k 需要跑两趟
            timeb=nx+k+(d-k)*2;
        }
        ans=min(timea,timeb);
        cout<<ans;
    }
    

    信息

    ID
    601
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    266
    已通过
    45
    上传者