声明

关于科学道理都会放进代码中,但是我们需要先了解一下位运算解这道题目的基础知识

我不是很会专业词语,所以仅介绍原理

位运算基础

众所周知,二进制是0和1

2^3 2^2 2^1 2^0
8 4 2 1
0 1 0 1

对应的,加出来就是5,这就是二进制转换,我利用二进制里的0和1来记录是否走过或者其他的yes/no的数据,和bool数组一样

和bool数组相比,二进制虽然位数有限,但是非常方便,很多事情不需要人为的去干.

比如将bool数组的false的部分找出来,合并两个数组之类的.非常浪费精力

怎么单独更改一位呢?

这里有一个例子:

9: 1001
2: 0010
2 + 9 = 11
2 | 9 = 11
11: 1011

代码里有一个lowbit函数

这是怎么获取最后一个为1的那一位所表示的的数值呢?

这里有一个例子,具体是关于反码与补码的:

9:  1001
-9: 0111
9&(-9) = 1
1: 0001

"理论存在,实践开始"

#include <iostream>

using namespace std;

// n:棋盘格数 ans:答案个数 all:全部位数为1的二进制,是一个工具变量
int n, ans, all;
// row:每一行默认的棋盘 (全局默认清空,但是赋值更保险(好习惯)
int row[20] = {}; // 返回最后一个为1的那一位所表示的的数值
int lowbit(int x) {
return x & (-x);
} // d:当前第几行,从0开始 col:存储列是否用过 lv:存储左对角线是否用过 rv:存储右对角线是否用过
void dfs(int d, int col, int lv, int rv){
if(d == n) {
// 能走到最后一步就记录次数
ans++;
return ;
}
// 用位运算来获取遍历的依据 别忘了row是从1开始的
int vis = all & (~(row[d + 1] | col | lv | rv));
// 简单遍历
for(int i = vis; i; i -= lowbit(i)) {
int x = lowbit(i);
// 下一步 为了适应行数的+1,对角线就要对应的左移或者右移
dfs(d + 1, col + x, (lv + x) >> 1, (rv + x) << 1);
}
} int main(){
// 零时变量,获取字符用
char t;
// 获取棋盘行列个数
cin >> n;
// 初始化为所有位数为1
all = (1 << n) - 1;
// 二位获取棋盘
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
cin >> t;
// 点为不能走(禁区)
if(t == '.') {
// 单独一行一列对应一个字节,更改即可
// 加等于也是没有问题的
row[i] |= (1<<(n - j));
}
}
}
// 开始深搜 0的所有位都为0
dfs(0, 0, 0, 0);
// 换行好习惯
cout << ans << endl;
return 0;
}

总结

题目很好,可以锻炼思维,突破传统的思维方式,打开一个新世界的大门

好久没有写过markdown,生疏了

哦吼吼,能看到这个链接就说明我的文章被爬虫爬了

请尊重原作者: https://www.cnblogs.com/dffxd/

小学四五年级可以学习到s组就是一个畸形的教育体系的体现,等国家发展起来了,吃枣药丸

[洛谷/题目] P1562 还是N皇后的更多相关文章

  1. 洛谷P1501 [国家集训队]Tree II(LCT,Splay)

    洛谷题目传送门 关于LCT的其它问题可以参考一下我的LCT总结 一道LCT很好的练习放懒标记技巧的题目. 一开始看到又做加法又做乘法的时候我是有点mengbi的. 然后我想起了模板线段树2...... ...

  2. 洛谷P3203 [HNOI2010]弹飞绵羊(LCT,Splay)

    洛谷题目传送门 关于LCT的问题详见我的LCT总结 思路分析 首先分析一下题意.对于每个弹力装置,有且仅有一个位置可以弹到.把这样的一种关系可以视作边. 然后,每个装置一定会往后弹,这不就代表不存在环 ...

  3. 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  4. 洛谷U19464 山村游历(Wander)(LCT,Splay)

    洛谷题目传送门 LCT维护子树信息常见套路详见我的总结 闲话 题目摘自WC模拟试题(by Philipsweng),原题目名Wander,"山村游历"是自己搞出来的中文名. 数据自 ...

  5. 洛谷P3434 [POI2006]KRA-The Disks(线段树)

    洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直 ...

  6. 洛谷P3459 [POI2007]MEG-Megalopolis(树链剖分,Splay)

    洛谷题目传送门 正解是树状数组维护dfn序上的前缀和,这样的思路真是又玄学又令我惊叹( 我太弱啦,根本想不到)Orz各路Dalao 今天考了这道题,数据范围还比洛谷的小,只有\(10^5\)(害我复制 ...

  7. 洛谷P2444 [POI2000]病毒(AC自动机,DFS求环)

    洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fa ...

  8. 洛谷P3796 【模板】AC自动机(加强版)(AC自动机)

    洛谷题目传送门 先膜一发yyb巨佬 orz 想学ac自动机的话,推荐一下yyb巨佬的博客,本蒟蒻也是从那里开始学的. 思路分析 裸的AC自动机,这里就不讲了.主要是这题太卡时了,尽管时限放的很大了.. ...

  9. 洛谷P2633 Count on a tree(主席树,倍增LCA)

    洛谷题目传送门 题目大意 就是给你一棵树,每个点都有点权,每次任意询问两点间路径上点权第k小的值(强制在线). 思路分析 第k小......又是主席树了.但这次变成树了,无法直接维护前缀和. 又是树上 ...

  10. 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)

    洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...

随机推荐

  1. Dijkstra求最短路 I(朴素算法)

    这道题目又是一个新算法,名叫Dijkstra 主要思路是:输入+dist和vis初始化(都初始化为0x3f)+输入g(邻接矩阵)+Dijkstra函数       Dijkstra函数:先将dist[ ...

  2. ThinkPad E580 装Ubuntu系 系统无WIFI 解决办法

    首先得下载 最新的驱动,我之前因为自己的下载的驱动不够新,导致我的驱动一直装不上去 https://github.com/tomaspinho/rtl8821ce 这个是最新的驱动的下载 地址,建议从 ...

  3. PowerToys 微软效率工具包 使用教程

    今天给大家介绍一款 非常实用的微软工具包 里面包含 快捷键的使用 颜色选择器 键盘管理器 屏幕标尺 鼠标实用工具等众多高效工作的功能 还是蛮出彩的 下载 PowerToys⇲ 安装教程 1.双击文件运 ...

  4. React中组件之间是如何通信的 react的组件通信方式有哪些

    一.是什么 通信指的是发送者通过某种媒体 以某种格式来传递信息 到收信者以达到某个目的,广义上,任何信息的传递都是通信 二.如何通信? 组件传递的方式有很多种,根据传送者和接收者可以分为如下: 父组件 ...

  5. element plus + vue3表单第一次数据未清空的bug问题解决

    使用框架:element Plus + vue3 场景描述: 场景一: 表单的添加和修改功能,公用同一个弹框,点击修改后,点击添加表单显示的是上次修改的数据. 场景二: 点击修改,数据回显到表单,然后 ...

  6. SPA路由实现的基本原理

    1. SPA路由实现的基本原理 前端单页应用实现路由的策略有两种,分别是 基于hash 和 基于 History API 基于hash 通过将一个 URL path 用 # Hash 符号拆分.- 浏 ...

  7. Cesium源码之Label(二)

    我们查看Cesium源码时,有时会发现源码中有大量的includeStart开头的注释,如下图所示. 这里面大多是调试信息,当使用gulp打包时,removePragmas参数设置为true,则会删除 ...

  8. C端自动化实现:appium+winappdriver+python

    一. 前言 有小伙伴有办公自动化的需求,特此出一篇C端自动化教程,并附带demo案例.C端的自动化比B端多一个appium,其他的操作大同小异. 二. 环境 appium:exe工具,用于启动服务,官 ...

  9. JZOJ 4253.QYQ在艾泽拉斯

    \(\text{Problem}\) 有向不联通图,求每个子图至多选出一条最大权值和的路径,求前 \(k+1\) 个 \(\text{Solution}\) 显然将每个子图缩点后 \(dp\),排序 ...

  10. 生物标记钙卫蛋白在RA诊疗中的应用研究

    标签: 类风湿关节炎; 预测因子; 钙卫蛋白; S100A9 [文献摘记]生物标记钙卫蛋白在RA诊疗中的应用研究 电邮发布日期:2016年4月20日 不断提升精确度和应用范围的组学技术正在帮助包括类风 ...