声明

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

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

位运算基础

众所周知,二进制是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. Grafana 系列文章(十):为什么应该使用 Loki

    ️URL: https://grafana.com/blog/2020/09/09/all-the-non-technical-advantages-of-loki-reduce-costs-stre ...

  2. Idea未识别maven项目

    https://blog.csdn.net/qq_41460654/article/details/120539509

  3. zookeeper04---ZAB协议

    转https://www.jianshu.com/p/2bceacd60b8a 1.什么是Zab协议 1.1Zab协议简介 1.2 Zab 协议的特性(怎么保持数据一致性) 2.Zab 协议实现的作用 ...

  4. PostgresSQL 常用操作方法

    1.后台生成XML作为参数然后数据库解析获取数据 var idList = ids.Split(new string[] { "," }, StringSplitOptions.R ...

  5. Python实现随机森林RF并对比自变量的重要性

      本文介绍在Python环境中,实现随机森林(Random Forest,RF)回归与各自变量重要性分析与排序的过程.   其中,关于基于MATLAB实现同样过程的代码与实战,大家可以点击查看MAT ...

  6. 学习Java Day11

    今天学习了二维数组:

  7. uboot目录

    目录 api 与硬件无关的 API 函数. arch 与架构体系有关的代码. 各种架构,例如arm cpu  各种版本的cpu, 例如armv7, arm9 各种厂商,例如瑞芯微mach-rockch ...

  8. 【KAWAKO】模型的压缩、扩张,计算模型的各种成本

    目录 模型压缩 量化 稀疏化训练 剪枝 知识蒸馏 自蒸馏 集成 使用精细化模型结构 模型扩张 深度 宽度 输入图像的分辨率 深度.宽度.分辨率联合扩张 使用精细化模型结构 计算模型的各种成本 参数量 ...

  9. 物语(monogatari)

    \(Description\) 某一天,少年邂逅了同病相连的IA.见面后,IA一把牵起少年的手,决定和他一起逃离部落,离开这个无法容身的是非之地. 要逃离部落,少年和IA就需要先选择一条耗时最少的路线 ...

  10. 三天吃透MySQL八股文(2023最新整理)

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...