不要查看,不要回复,私人代码
查看原帖
不要查看,不要回复,私人代码
1377278
Yao0_2012楼主2025/8/3 11:12
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;
    while (t--) {
        ll m, n;
        cin >> m >> n;
        vector<pair<ll, ll>> v;
        for (ll i = 0; i < n; i++) {
            ll x, y;
            cin >> x >> y;
            v.push_back({x, y});
        }

        sort(v.begin(), v.end());
        bool valid = true;
        vector<pair<ll, ll>> unique_v;

        if (!v.empty()) {
            unique_v.push_back(v[0]);
            for (ll i = 1; i < v.size(); i++) {
                if (v[i].first == v[i-1].first) {
                    if (v[i].second != v[i-1].second) {
                        valid = false;
                    }
                } else {
                    unique_v.push_back(v[i]);
                }
            }
        }

        if (!valid) {
            cout << "No\n";
            continue;
        }

        v = unique_v;

        for (auto &record : v) {
            if (record.first < 0 || record.first > m) {
                valid = false;
                break;
            }
        }

        if (!valid) {
            cout << "No\n";
            continue;
        }

        if (v.empty()) {
            v.push_back({0, 0});
        } else {
            if (v[0].first != 0) {
                v.insert(v.begin(), {0, 0});
            } else if (v[0].second != 0) {
                valid = false;
                cout << "No\n";
                continue;
            }
        }

        for (ll i = 0; i < v.size() - 1; i++) {
            ll x1 = v[i].first;
            ll y1 = v[i].second;
            ll x2 = v[i+1].first;
            ll y2 = v[i+1].second;

            if (x1 == x2) continue;

            ll d = x2 - x1;
            ll diff_val = abs(y2 - y1);

            bool condA = false;
            if (diff_val <= d && (d - diff_val) % 2 == 0) {
                condA = true;
            }

            bool condB = false;
            if (d - 1 >= 0 && abs(y2) <= d - 1) {
                condB = true;
            }

            if (!condA && !condB) {
                valid = false;
                break;
            }
        }

        cout << (valid ? "Yes" : "No") << '\n';
    }
    return 0;
}
2025/8/3 11:12
加载中...