我也是看了他人的解析才知道考点是:曼哈顿距离 在坐标轴上从一个点走到另一个点需要的最短距离叫做曼哈顿距离, 即distance=∣x1−x2∣+∣y1−y2∣ ; 具体的曼哈顿距离自行查阅资料。 首先m恰好等于曼哈顿距离时,直接可以到达目标。 其次是m>曼哈顿距离时,这个是比较难以理解的。当多出来的步数为偶数时,一定能够到达目标点,为奇数时不能到达。 坐标轴上的点通过曼哈顿的距离方式时一定会经过z1、z2、z3、z4点,此时花费的步数为distance-1,剩余步数为k=m-distance+1; 在这四个点处有3种方式能够到达目标点,分别花费的步数为1、3、5。此后在此基础上分别取4的余数,得到的一定是这三个数,也就是从左绕一圈,从右绕一圈。也就是说在这个点剩余步数为奇数时,能够到达,由于剩余步数中包含一步distance,所以k-1为偶数,进一步简化为当经过曼哈顿距离后,剩余步数为偶数时,一定能够到达,否则不能到达。 alt alt 附代码:

#include<iostream>
#include<cmath>
using namespace std;

int main(){
    int a,b,m;
    cin>>a>>b>>m;
    int tmp=abs(a)+abs(b);
    if(tmp==m)
        cout<<"Yes";
    else if((m-tmp)>0&&(m-tmp)%2==0) //只有当m超出曼哈顿距离时才会考虑下一步。
        cout<<"Yes";
    else
        cout<<"No";
    return 0;
}

程序中需要注意的是距离为绝对值,并且需要考虑m是小于distance时,一定是不能到达的。

以上是我直接思考的方式来分析这道题,如果有什么不好的地方,请看看其他牛油的分析。