洛谷 P2105 K皇后 题解
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 列,数据保证任何两个皇后都不会被摆在同一个格子里。
输出格式
仅一个整数,表示棋盘上还有多少个格子是不会被攻击到的。
输入输出样例
- 12 13 6
- 10 4
- 12 10
- 1 1
- 2 3
- 3 2
- 2 6
- 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皇后 题解的更多相关文章
- 洛谷P2105 K皇后
To 洛谷.2105 K皇后 题目描述 小Z最近捡到了一个棋盘,他想在棋盘上摆放K个皇后.他想知道在他摆完这K个皇后之后,棋盘上还有多少了格子是不会被攻击到的. (Ps:一个皇后会攻击到这个皇后所在的 ...
- 洛谷 P2105 K皇后
P2105 K皇后 题目描述 小Z最近捡到了一个棋盘,他想在棋盘上摆放K个皇后.他想知道在他摆完这K个皇后之后,棋盘上还有多少了格子是不会被攻击到的. (Ps:一个皇后会攻击到这个皇后所在的那一行,那 ...
- 洛谷2105 k皇后
P2105 K皇后 题目描述 小Z最近捡到了一个棋盘,他想在棋盘上摆放K个皇后.他想知道在他摆完这K个皇后之后,棋盘上还有多少了格子是不会被攻击到的. (Ps:一个皇后会攻击到这个皇后所在的那一行,那 ...
- 洛谷 P1219 八皇后题解
题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
随机推荐
- save an excel csv to a github csv file
:%s/\t/,/g
- mysql索引 数据库优化
1.mysql索引结构b+树 a.首先要说二叉树,二叉查找树,数的结构不用多说,二叉查找树,大概就是几个原则,左边比右边的小,然后保持一个分布均匀,也就是树的高度尽量最小. b.b-树,b-树和二叉查 ...
- VS Code:4个中文乱码问题及解决方法-转载
https://www.jianshu.com/p/6a2c21cc07bb 1. 背景 凡是编程软件,特别是国外的软件,都有或多或少的中文乱码问题(毕竟程序都是用英文写的).现提出VS Co ...
- https代理服务器(四)java动态签发【失败】
https://zhuanlan.zhihu.com/p/355241710?utm_id=0 http://t.zoukankan.com/xiaxj-p-8961131.html https:// ...
- nop 中创建任务(Task)
NopCommerce 中Task 原理是服务端开启线程定时跑. 1.在数据表ScheduleTask中添加一条数据, 2.自定义类,继承ITask 即可 using Data.Log4Net; us ...
- BeanUtils.copyProperties null覆盖问题
直接用一下工具类 public class CopyUtils { public static String[] getNullPropertyNames (Object source) { fina ...
- java资源精华
1. java基础教程虚拟机性能分析和故障解决工具_哔哩哔哩_bilibili 2.https://www.bilibili.com/video/BV1Eb4y1v7mB/?p=2&vd_so ...
- 【C学习笔记】day2-1 给定两个整形变量的值,将两个值的内容进行交换
#include<stdio.h> int main() { int a=0, b=1,temp; temp = b; b = a; a = temp; //printf("%d ...
- golang中自带base64编码和解码
package main import ( "encoding/base64" "fmt" "log" ) func main() { in ...
- Java-Maven实现简单的文件上传下载(菜鸟一枚、仅供参考)
1.JSP页面代码实现 <%@ page language="java" contentType="text/html; charset=UTF-8" p ...