随笔分类 -  ACM / 搜索

摘要:原题链接 考察:dfs 错误思路: 有点类似$acwing$的正则问题,然而并不是.... 正确思路: 当遇到一个pair后面一定是<,但是$int$不一定.需要考虑它在pair后的哪个位置.很巧妙的方法是一个pair是< , >三个符号$2$个$dfs$.,是第一个dfs回溯后添加,>是第二个df 阅读全文
posted @ 2021-08-24 23:44 acmloser 阅读(47) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs 思路: 可以移动的范围不超过$10^5$,所以直接bfs.... ##Code #include <iostream> #include <cstring> #include <algorithm> #include <map> #include <queue> #inclu 阅读全文
posted @ 2021-07-29 13:20 acmloser 阅读(32) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:DFS 思路: $mod[i]$维护$i$结点是否被修改,$anc[i]$记录$i$结点的父节点的父节点是谁.直接一次DFS即可同时求出两个值. ##Code #include <iostream> #include <cstring> #include <vector> using 阅读全文
posted @ 2021-07-24 10:51 acmloser 阅读(32) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:思维 or 搜索 错误思路: 二分模拟,精度爆炸 正确思路一: 搜索....我是fw 正确思路二: 双指针设置$l = 1,r = n$,如果$s[i]==l$,说明右边不会在有人,$s[i]==r$左边不会在有人. ##Code #include <iostream> #inclu 阅读全文
posted @ 2021-07-23 09:44 acmloser 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:DFS 错误思路: 一开始想的是数位dp,然后发现数字是由两部分构成,后面取值范围不仅取决于后面的数字是否取到了$a[pos]$,也取决于前面数字是否取到最值.然后发现数位dp做不了= = 正确思路: 可以发现数字最多是7位,不考虑7位上重复最多$7^7$种方法.直接DFS枚举,再分 阅读全文
posted @ 2021-07-17 09:18 acmloser 阅读(37) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:搜索 思路: ​ 参考lrj老师的总结.当问题可以用回溯解决但明显搜索树很深时,可以考虑用迭代加深优化. ​ 分母最小能到1e7,很明显bfs一层就有MLE的风险.考虑dfs.很明显dfs的参数需要当前分子,当前分母,目前深度,枚举开始数.这里没必要等差为1递增枚举然后判断大小,直接 阅读全文
posted @ 2021-04-26 08:52 acmloser 阅读(38) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:搜索 思路: 这道题题目描述略坑,这里简述下题意: 1.所有路线上的公交车形成等差数列,而且等差数列的最后一项再+d>60. 2.存在两个完全一样的路线. 3.求路线最少值. 由于题目提示信息:ans<=17.可以发现搜索树很深,但是答案在很浅的位置.所以可以用迭代加深搜索.此外这道 阅读全文
posted @ 2021-04-25 21:22 acmloser 阅读(59) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:IDA*+离散化 这估价函数本蒟蒻完全没想到.... 思路: 最少操作次数,如果用bfs需要存储数组.考虑一波IDA*,无需存储数组只需要回溯.但是估价函数不好想.参考了大佬的题解,原来需要离散化....将不同的半径按大小映射为1~n之间的数字.目标就是让最终序列为1...n递增排序 阅读全文
posted @ 2021-04-25 01:48 acmloser 阅读(84) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs 思路: 存下所有草药的坐标,对于每一个草药求贝茜和骑士到达它的时间,每个时间遍历求最小值. 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 5 const 阅读全文
posted @ 2021-04-24 17:00 acmloser 阅读(61) 评论(0) 推荐(1) 编辑
摘要:原题链接 折半搜索:一个我做一道相关题能T10次的算法 参考了大佬的题解,本蒟蒻没想出来怎么去重(搜索也没想到...绕在只放第x组的死循环里),但是大佬的题解也是T了第5点,开了O2才过... 思路: 首先明确重复的方法与所取砝码的质量无关,只与取的分别是谁有关.也就是说 测试数据 4 3 3 3 阅读全文
posted @ 2021-04-24 16:16 acmloser 阅读(70) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双向dfs 思路: 爆搜的时间复杂度是O(240).明显TLE.背包的时间复杂度是O(m*n) 也会TLE.所以需要优化. 这里的优化考虑折半搜索.也就只搜索一半.在搜索另一半的时候进行答案累加.这里先预处理在0~n/2的比赛里选的方案.然后在搜另一半的时候二分找到最大的与当前花费和 阅读全文
posted @ 2021-04-24 12:13 acmloser 阅读(56) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:搜索 思路: 简单的bfs广搜即可.但是注意存在上一层是传送机下一层还是传送机的死循环点. 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 5 const int 阅读全文
posted @ 2021-04-23 17:09 acmloser 阅读(37) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs 思路: 考虑过IDA*,但是搜索层数不一定很浅.然后就是A*,想法是所有不在位置上的数的个数(空白部分不计).但是做之前为了搞懂题意看了讨论区,结果暴雷...看到题解大字标题bfs+hash.....我错了,以后还是自己搞懂题意555 普通的bfs就可以过.可以将数组定义为结 阅读全文
posted @ 2021-04-23 13:34 acmloser 阅读(45) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs 第一思路: 预处理鬼到达每个点的最短时间,再对男孩与女孩分别bfs...体感没错,不知道会不会MLE,但本蒟蒻连样例都没过.... 省事思路: 压根不用对鬼bfs.如果鬼能在k秒后达到某点,说明鬼的起点与终点的曼哈顿距离<=2*k.本蒟蒻完全没想到.... 接下来是对男女分别 阅读全文
posted @ 2021-04-22 21:33 acmloser 阅读(48) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:IDA* 完全没想到啊....但通过这道题感觉dfs本质就是枚举吧...所以这道题dfs需要一直枚举AGCT,直到所有位置都匹配. 思路: 但是光枚举肯定会TLE的,所以需要剪枝.总共只有8个字符串,每个只有5个字符.最多(不可能达到)要40个字符.所以可以考虑迭代加深.我们在匹配时 阅读全文
posted @ 2021-04-22 16:46 acmloser 阅读(64) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:搜索 思路: 预处理有子弹和城堡的坐标,这部分除了暴力没有更好的办法.因为还有一个时间限制,所以需要三维数组.剩下就是BFS. 剪枝: 1.相同时间的拜访点不必再访问. 2.当离终点的曼哈顿距离>能量 不必再走下去. 注意:城堡处一定要预处理再判断子弹. 1 #include <io 阅读全文
posted @ 2021-04-22 08:40 acmloser 阅读(34) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:搜索 思路: bfs或dfs.dfs代码短一点.bfs可以用二进制标记去过的城市.不必用数组,同理dfs.听说本题数据水,可能本蒟蒻的代码有点问题. 1 #include <iostream> 2 #include <cstring> 3 #include <vector> 4 us 阅读全文
posted @ 2021-04-21 23:27 acmloser 阅读(46) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:搜索 有大佬用的是单向搜索打表.不明觉厉...本蒟蒻是用的是双向bfs,参考了大佬的题解 原思路: 正反向搜索.按正向字典序顺序枚举操作,结果WA了n次....错误原因是正向字典序在正反重合时不一定保证完整的字符串是字典序最小的.如果是反向搜的时候重合的,就可能存在非最小的解. 正确 阅读全文
posted @ 2021-04-21 12:29 acmloser 阅读(66) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:反向bfs+打表 思路: 可以以终态为起点求能到达的所有状态,并记录路径.这里可以不用unordered_map的记录状态,而是用康拓展开.(详细解释 GO) 注意康拓展开和反康拓展开是返回前面有几个全排列. 不多解释,这篇题解已经很详细了GO 1 #include <unorder 阅读全文
posted @ 2021-04-20 23:42 acmloser 阅读(41) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:bfs 思路: vector存储所有是草的点,一次bfs枚举两个点作为起点.求遍历所有草的最少时间. 注意:存在只有一株草的情况 菜到只会做水题...蓝桥杯没得了5555 1 #include <iostream> 2 #include <cstring> 3 #include <v 阅读全文
posted @ 2021-04-20 13:59 acmloser 阅读(34) 评论(0) 推荐(0) 编辑