1 条题解

  • 0
    @ 2025-8-24 22:46:18

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Night_sea_64
    距离省选还有 +inf 天。

    搬运于2025-08-24 22:46:18,当前版本为作者最后更新于2023-04-10 20:54:27,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    因为它两格为一个周期,所以我们两步两步地看。

    枚举两步每步往哪里走,发现它其实每两步就是向上、下、左、右走两格。

    如果在国际象棋的棋盘上,起点在黑格。那么如果按照要求移动一定不会跑到白格上去。而黑白格是通过行列和的奇偶性判断的。所以如果起点和终点行列和的奇偶性不同,输出 1-1

    然后,如果起点与终点 xx 坐标之差与 yy 坐标之差都是偶数,说明能直接通过每次向上下左右走两格的方法走到,输出曼哈顿距离 ÷2\div2

    否则,那么我们可以先走到 (x21,y21)(x_2-1,y_2-1) 或者 (x2+1,y2+1)(x_2+1,y_2+1) 的位置,再多走一步。输出这两种情况最小值再 +1+1

    #include<iostream>
    #include<cmath>
    #define int long long
    using namespace std;
    signed main()
    {
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        if((a+b)%2!=(c+d)%2)cout<<-1<<endl;
        else if((int)(abs(a-c))%2==0)cout<<abs(a-c)+abs(b-d)<<endl;
        else cout<<min(abs(a-(c+1))+abs(b-(d+1))+1,abs(a-(c-1))+abs(b-(d-1))+1)<<endl;
        return 0;
    }
    
    • 1

    信息

    ID
    8527
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者