1 条题解

  • 0
    @ 2026-9-29 10:47:10

    这题暴力枚举即可。

    直接记录,左右是 xx,上下是 yy,左上到右下是 x−y+nx-y+n,右上到左下是 x+y−1x+y-1,注意可能站在对手的位置射击。

    #include<bits/stdc++.h>
    #define ll long long 
    using namespace std;
    const int maxn=510,inf=1e9;
    int n,k,x,y,z,tot,ans;
    int row[maxn],col[maxn],lt[maxn],rt[maxn],map1[maxn][maxn];
    inline int read() {//快读 
    	int r=0;bool flag=true;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-') flag=false;ch=getchar();}
    	while(ch>='0'&&ch<='9'){r=(r<<3)+(r<<1)+(ch^48);ch=getchar();}
    	return flag==true?r:~r+1;
    }
    int main(void) {
        n=read();
        k=read();
        for(int i=1;i<=k;i++) {
            x=read();
            y=read();
    		map1[x][y]++;
            row[x]++;col[y]++;lt[x-y+n]++;rt[x+y-1]++;
        }
        for(int i=1;i<=n;i++)
        	for(int j=1;j<=n;j++)
        		if(row[i]+col[j]+lt[i-j+n]+rt[i+j-1]-3*map1[i][j]==k) 
    				ans++;
        printf("%d\n",ans);
        return 0;
    }
    
    • 1

    信息

    ID
    1448
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    73
    已通过
    22
    上传者