I-car

无论是HDU的多校还是牛客的多校,给大家的感觉是。感觉很对,但是不能证明是对的,也不能证明是错的。 大胆猜测就AC,有时候感觉。。。。  有什么办法呢

对于这题,确实已经快想到正确答案了,只是没想到对于边界情况也可以等价删行删列

#include<bits/stdc++.h>
#define PI acos(-1.0)
#define pb push_back
#define F first
#define S second
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e6+6;
const int MOD=1e9+7;
template <class T>
bool sf(T &ret){ //Faster Input
    char c; int sgn; T bit=0.1;
    if(c=getchar(),c==EOF) return 0;
    while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();
    sgn=(c=='-')?-1:1;
    ret=(c=='-')?0:(c-'0');
    while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
    if(c==' '||c=='\n'){ ret*=sgn; return 1; }
    while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10;
    ret*=sgn;
    return 1;
}
map<int,int> r,c;
int main(void){
    int n,m;
    sf(n),sf(m);
    for(int i=1;i<=m;i++){
        int x,y;
        sf(x),sf(y);
        r[x]=1,c[y]=1;
    }
    ll ans=2ll*n;
    if(n%2==0){
        printf("%lld\n",ans-(int)r.size()-(int)c.size());
    }
    else{
        ans--;
        ans-=(int)r.size()+(int)c.size();
        int pos=(n+1)/2;
        if(c[pos])  ans++;
        if(r[pos])  ans++;
        if(c[pos]&&r[pos]){ans--;}
        else if(c[pos] || r[pos]){}
        printf("%lld\n",ans);
    }
 
    return 0;
}