首先考虑没有破话的情况
看到样例便可以联想到可以将小车按照大风车的样子放,然后小车们就可以转起来了,这样放置的小车最多,为2*n-n mol 2
然后再考虑有破坏的情况
因为每一行每一列最多只能放一辆车,所以只需要在我们原来的基础上减去这些新加入的行跟列上的小车即可
#include<bits/stdc++.h>
using namespace std;
#define Max (int)(1e5+10)
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int x,y,num=2*n;
set<int> row,clo;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(!row.count(x))
row.insert(x),num--;
if(!clo.count(y))
clo.insert(y),num--;
}
if(n&1&&!row.count((n+1)>>1)&&!clo.count((n+1)>>1))
num--;
printf("%d\n",num);
}
}