-
分析
发现只能跳 \(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;
}