首先我想说这道题真的很有意思,不过数据量稍微小了一些,所以我第一发水过去了,但是细想发现没这么简单,于是想了挺长时间写出了一发严谨的。

我觉得经过思考大家应该都对这道题有一些理解。我就直接讲我的想法了。第一发ac我是思考了一会觉得只要距离相等,或者处于对角线(距离差2),就ok=true。然后ac了

#include <bits/stdc++.h>
using namespace std;
void solve()
{
    int n;
    cin >> n;
    int x1, y1;
    cin >> x1 >> y1;
    int x2, y2;
    cin >> x2 >> y2;
    bool ok = false;
    if (x1 - x2 == y2 - y1)
        ok = true;
    if (x1 - x2 == y1 - y2 && (y1 < n - 1 && y2 < n - 1))
        ok = true;
    if (ok)
        cout << "YES\n";
    else
        cout << "NO\n";
}
int main()
{
    solve();
    return 0;
}

。但是我又思考了一下,原来我是运出来的,因为按理说,如果 Bing 和 Bong 的距离差是 4,6,8...偶数步, 只要空间足够,我们可以在第二行放障碍物(隔开或者连着放),让领先那个人绕很多次弯路,也是可以追平的

于是我开始脑海模拟分析领先者在第一行或者第二行的情况,如果领先者在第一行,如果想让ta减缓脚步,那么只能在第一行放置障碍物让他去到第二行,再在第二行放置障碍物,让ta步数加2,依次类推,步数增加偶数步。但我们经过模拟可以发现,此时落后者无论在第一或者第二行,ta都会被那些障碍物所影响,最终变成一种“双方间距依旧保持不变”的状态,所以我们可以得出第一个特判,领先者必须在第二行。

哦这是第二个特判,第一个特判应该是双方距离只能是偶数。然后根据第二个特判可以联想到,既然障碍物的影响,领先者在第二行那么落后者就不能也在第二行,这就是第三个特判。最后判断一下领先者的y小于n-1就行了,因为必须离终点大于等于2我们才能放置障碍物在中间呀。

#include <bits/stdc++.h>
using namespace std;
void solve()
{
    int n;
    cin >> n;
    int x1, y1;
    cin >> x1 >> y1;
    int x2, y2;
    cin >> x2 >> y2;
    int dista = (n - y1) + (2 - x1);
    int distb = (n - y2) + (2 - x2);
    bool ok = false;
    if (dista == distb)
    {
        ok = true;
    }
    else if (abs(dista - distb) % 2 == 0)
    {
        if (dista < distb)
        {
            if (x1 == 2 && x2 == 1 && y1 < n - 1)
                ok = true;
        }
        else
        {
            if (x2 == 2 && x1 == 1 && y2 < n - 1)
                ok = true;
        }
    }
    if (ok)
        cout << "YES\n";
    else
        cout << "NO\n";
}

int main()
{
    solve();
    return 0;
}