牛客网多校2 car(思维模拟)

看到图就明白怎么放了。。。

#include <bits/stdc++.h>
 
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int n,m,r[maxn],c[maxn];
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        int x,y;
        memset(r,0,sizeof r);
        memset(c,0,sizeof c);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&x,&y);
            r[x]=1;
            c[y]=1;
        }
        int ans=n/2*4;
        for(int i=1;i<=n/2;i++)
        {
            if(r[i])
                ans--;
            if(c[i])
                ans--;
        }
        for(int i=n;i>n-n/2;i--)
        {
            if(r[i])
                ans--;
            if(c[i])
                ans--;
        }
        if(n%2==1)//奇数时中间多来一个‘+’字最多放一个
        {
            int k=n/2+1,flag=1;
            if(r[k]&&c[k])
                flag=0;
            ans+=flag;
        }
        printf("%d\n",ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/dllpxfire/article/details/81153818