P9204 题解

· · 题解

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

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

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

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

否则,那么我们可以先走到 (x_2-1,y_2-1) 或者 (x_2+1,y_2+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;
}