START:

2021-08-06

16:34:44

题目链接:

https://www.luogu.com.cn/problem/P2105

题目详情:

小 Z 最近捡到了一个棋盘,他想在棋盘上摆放 K 个皇后。他想知道在他摆完这 K 个皇后之后,棋盘上还有多少个格子是不会被攻击到的。

注意:一个皇后会攻击到这个皇后所在的那一行,那一列,以及两条对角线。

输入格式

第一行三个正整数 n,m,K,表示棋盘的行列,以及小 Z 摆放的皇后的个数。

接下来 K 行,每行两个正整数 x,y,表示这个皇后被摆在了第 x行,第 y 列,数据保证任何两个皇后都不会被摆在同一个格子里。

输出格式

仅一个整数,表示棋盘上还有多少个格子是不会被攻击到的。

输入输出样例

输入 #1复制

12 13 6
10 4
12 10
1 1
2 3
3 2
2 6
输出 #1复制

25

说明/提示

  • 对于 30% 的数据,1≤n,m≤5×10^3,1≤K≤500;
  • 对于另外 10% 的数据  K=1;
  • 对于 100% 的数据,1≤n,m≤2×10^4,1≤K≤500。

分析:

题目数据有那么亿点点大,所以正经的暴力是不行了,我们每放置一个皇后,用四个数组x[N],y[N],dig[N],udig[N],来储存该皇后

所在的行,列,对角线以及反对角线的状态,我们在图上画一个坐标系,给出任意几个点放置皇后,如下图:

我们可以清楚的看到,点1的横纵坐标为(2,4),当点1放置一个皇后之后,第4行就被全被攻击了,第2列全被攻击,并且x+y=6上的点全被攻击了,以及x-y=-2上的点全被攻击了,所以在点(x,y)出放置一个皇后之后,我们更新所有的数组状态:

x[i]=1,y[j]=1,dig[x+y]=1,udig[x-y+C]=1

这里的udig[x-y+C]中,下标x-y加上常数C的原因是放置数组下标溢出,这就是我们的核心函数了。

在写核心函数之前,我们先写一个初始化函数,将所有的输入处理了

void init(){
for(int i=1;i<=k;i++)
{
int a,b;
scanf("%d%d",&a,&b);
x[a]=1;
y[b]=1;
dig[a+b]=1;
udig[a-b+C]=1;
}
}

  

接着写核心函数fac()

int fac(){
int res=0;
for(int i=1;i<=n;i++){
if(x[i])continue;
for(int j=1;j<=m;j++){
if(y[j]||dig[i+j]||udig[i-j+C])continue;
else res++;
}
}
return res;
}

  

最后这几个函数和程序基本框架结合起来

完整代码如下:

(PS:需要开启氧气优化O2优化)

#include<iostream>
#include<cstdio>
using namespace std;
const int N=5e5+10;
const int C=2e4+10;
int n,m,k;
bool x[N],y[N],dig[N],udig[N]; int fac(){
int res=0;
for(int i=1;i<=n;i++){
if(x[i])continue;
for(int j=1;j<=m;j++){
if(y[j]||dig[i+j]||udig[i-j+C])
          continue;
else res++;
}
}
return res;
} void init(){
for(int i=1;i<=k;i++)
{
int a,b;
scanf("%d%d",&a,&b);
x[a]=1;
y[b]=1;
dig[a+b]=1;
udig[a-b+C]=1;
}
} int main()
{
cin>>n>>m>>k;
init();
cout<<fac()<<endl;
return 0;
}

  

end:

2021-08-06

16:59:16

洛谷 P2105 K皇后 题解的更多相关文章

  1. 洛谷P2105 K皇后

    To 洛谷.2105 K皇后 题目描述 小Z最近捡到了一个棋盘,他想在棋盘上摆放K个皇后.他想知道在他摆完这K个皇后之后,棋盘上还有多少了格子是不会被攻击到的. (Ps:一个皇后会攻击到这个皇后所在的 ...

  2. 洛谷 P2105 K皇后

    P2105 K皇后 题目描述 小Z最近捡到了一个棋盘,他想在棋盘上摆放K个皇后.他想知道在他摆完这K个皇后之后,棋盘上还有多少了格子是不会被攻击到的. (Ps:一个皇后会攻击到这个皇后所在的那一行,那 ...

  3. 洛谷2105 k皇后

    P2105 K皇后 题目描述 小Z最近捡到了一个棋盘,他想在棋盘上摆放K个皇后.他想知道在他摆完这K个皇后之后,棋盘上还有多少了格子是不会被攻击到的. (Ps:一个皇后会攻击到这个皇后所在的那一行,那 ...

  4. 洛谷 P1219 八皇后题解

    题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...

  5. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  6. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  7. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  8. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  9. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  10. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

随机推荐

  1. Hyper-v 安装openwrt

    安装注意事项: 1.只能选一代,网卡可以使用新版2.网卡高级设置,MAC地址欺骗一定要选上,不选外部交换机不能上网.3.防火墙做wan口转发4.防火墙wan口,两个reject改为 accept . ...

  2. 实现ViewPager一次滑动多页(保持居中)

    项目中开发日历功能,需求是可以连续滑动多页,有列表的流畅.又要保持当前页居中显示. 参考文献:  http://www.open-open.com/lib/view/open1435026935638 ...

  3. gitlab+jenkins配置自动触发构建

    1.jenkins安装gitlab插件 2.启动gitlab容器 docker run -itd -v /opt/gitlab/etc:/etc/gitlab -v /opt/gitlab/log:/ ...

  4. Excel 的盒须图 离群值 Outliers

    Excel 中的盒须图 翻译自https://www.excel-easy.com/examples/box-whisker-plot.html 本示例教您如何在Excel中创建盒须图.盒须图显示了数 ...

  5. 100多个常用 API 接口整理大全

    聚合数据提供30大类,160种以上基础数据API服务,国内最大的基础数据API服务,下面就罗列一些免费的各类API接口. 手机号码归属地API接口: https://www.juhe.cn/docs/ ...

  6. R7-1 判断回文字符串

    R7-1 判断回文字符串 分数 15 全屏浏览题目 切换布局 作者 颜晖-历年试卷 单位 浙大城市学院 输入一个字符串,判断该字符串是否为回文.回文就是字符串中心对称,从左向右读和从右向左读的内容是一 ...

  7. 吴恩达老师机器学习课程chapter07——聚类

    吴恩达老师机器学习课程chapter07--聚类 本文是非计算机专业新手的自学笔记,高手勿喷. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第十三章. 缺少重要推演,只能作为 ...

  8. iOS新建项目基础设置

    我们新建项目工程的时候一般都需要配置些基本设置,以下是我整理的一些基础配置 一:  pch文件的设置     pch:预编译头文件,这个文件会被编译存储在一个缓存空间,并自动有且只有一次包含在每个文件 ...

  9. intellij idea 用 Gradle新建 spring boot

    intellij idea用的是ideaIU-2017.1.4  .spring boot用的是2.10 出现错误 ERROR StatusLogger Log4j2 could not find a ...

  10. 整合jUnit4和jUnit5

    整合jUnit4 1.引入依赖 <dependency> <groupId>org.springframework</groupId> <artifactId ...