CF333B题解

  • 分析

    发现只能跳 \(n - 1\) 次,所以每个点一定是畅通无阻地抵达终点,所以有障碍的行和列放不了,并且每一个行或列最多放一个。
    因为同时跳,思考会不会跳到一起,发现如果不在正中间可以将起点放到另一头就不会跳到一起,如果在正中间就一定会跳到一起,所以正中间的行和列加一起最多只能放一个。
  • 代码

#include <iostream>
using namespace std;
constexpr int MAXN(1000007);
int x[MAXN], y[MAXN];
int n, m, ans;
inline void read(int &temp) { cin >> temp; }
int main() {
	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	read(n), read(m);
	for (int i(1), a, b; i <= m; ++i) {
		read(a), read(b);
		++x[a], ++y[b];
	}
	for (int i(2); i < n; ++i) {
		if (n % 2 && i == n / 2 + 1)  ans += (!x[i] || !y[i]);
		else  ans += !x[i], ans += !y[i];
	}
	cout << ans << endl;
	return 0;
}
posted @ 2023-11-02 19:09  Kazdale  阅读(22)  评论(0编辑  收藏  举报