You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求解n×n棋盘上未被Bishop攻击的方格数(代码待完善)

问题描述

国际象棋中的“主教(Bishop)”会攻击所有位于同一条对角线(两种方向的对角线)上的方格。Shakhriyar在n×n大小的棋盘上放置了m个主教,需统计未被攻击的方格数量。

输入:
第一行输入n(1≤n≤1e6)和m(1≤m≤1e5),后续m行输入每个主教的坐标(r[i],c[i]),所有主教位置唯一。

输出:
未被攻击的方格数。

输入示例:

10 6
4 7
8 5
8 7
6 2
9 7
8 4

输出示例:

33
我的解题进展

棋盘共有2n-1条对角线,用d表示对角线编号,(i;j)为方格坐标(y轴为i,x轴为j)。我定义了两类对角线编号规则:

  • 类型1:d = n - (i - j)
  • 类型2:d = i + j - 1

我用集合记录了被攻击的两类对角线,但计算被攻击方格总数时,对角线的交点会被重复统计,这个问题还没解决。

我的C++代码:

#include<iostream>
#include<set>
using namespace std;
int main(){
    set<int> hit_diagonals1,hit_diagonals2;
    int n,m;
    cin>>n>>m;
    for(int k=0,i,j; k<m; k++){///O(m)-->1e5
        cin>>i>>j;
        hit_diagonals1.insert(n-(i-j));
        hit_diagonals2.insert(i+j-1);
    }
    int cnt=0;//hit_points_number
    
    //.....
    
    cout<<n*n-cnt<<'\n';
    return 0;
}

内容的提问来源于stack exchange,提问作者Isa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 07:37:33