搜索
CaprYang
这个作者很懒,什么都没留下…
展开
-
CCPC-Wannafly Winter Camp Day1 (Div2, onsite) B 吃豆豆 dp | 分层BFS
题解将二维平面增加两个维度 一个已经获得的糖豆数量 另一个为当前位置距离下次获得糖豆的剩余时间 进行分层BFSBFS过程中队列节点记录坐标、已获得数量、已用时间 当已用时间%当前位置t[i][j]==0时则获得一个 标记已经走过的不再重复AC代码#include <stdio.h>#include <bits/stdc++.h>usi原创 2019-01-20 18:07:58 · 601 阅读 · 0 评论 -
河南省第九届ACM程序设计竞赛 部分题解
A 表达式求值 <逆波兰>#include <stdio.h>#include <bits/stdc++.h>#define fst first#define sed secondusing namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const ll LINF =...原创 2019-04-21 14:14:21 · 1179 阅读 · 0 评论 -
2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛)
A Chino with Geometry <计算几何>懒省事直接贴kuangbin大大的模版了。。最后取整加了个精度损失#include <stdio.h>#include <bits/stdc++.h>#define fst first#define sed secondusing namespace std;typedef long long...原创 2019-04-09 21:24:50 · 298 阅读 · 0 评论 -
Find a way HDU - 261 搜索
题解使用BFS求出两个人到达每个刷新点的最短时间,枚举每个刷新点根据已有记录求最小时间和即可。AC代码#include <stdio.h>#include <bits/stdc++.h>#define fst first#define sed secondusing namespace std;typedef long long ll;const int...原创 2019-03-30 23:27:25 · 440 阅读 · 0 评论 -
Oil Deposits HDU - 1241 搜索
题解DFS进行搜索,求不同联通块数量,每次搜索标记搜索到的位置,标记的位置不再搜索。每次开始搜索答案+1上下左右、左上、左下、右上、右下也算是联通。AC代码#include <stdio.h>#include <bits/stdc++.h>#define fst first#define sed secondusing namespace std;type...原创 2019-03-30 23:24:08 · 337 阅读 · 0 评论 -
Fire! UVA - 11624 搜索
题解两次BFS,第一次BFS求出火蔓延到每个位置所需的最小时间。第二次BFS人物尝试上下左右移动,如果移动到当前位置的时间大于等于火蔓延到的时间则当前人会被烧到,方案不可行。AC代码#include <stdio.h>#include <bits/stdc++.h>#define fst first#define sed secondusing namesp...原创 2019-03-30 23:20:57 · 399 阅读 · 0 评论 -
Fire Game FZU - 2150 搜索 分类讨论
题解两个熊孩子可以选择2个地点进行点火,分三种情况讨论,1个联通块,2个联通块,2个以上联通块。2个以上联通块肯定就没办法烧完了直接-1。2个联通块时由于数据量很小,对于每个联通块,枚举点火点BFS得到当前联通块所有点都着火的所需时间,每个联通块不同点火点的时间取最小,两个联通块的时间取最大。1个联通块时,由于数据很小,先将当前联通块以每个位置为点火点,引燃每个位置的所需时间求出来。枚举...原创 2019-03-30 23:16:59 · 471 阅读 · 0 评论 -
Pots POJ - 3414 搜索
题解使用BFS搜索,每次尝试将某个桶的水倒掉、装满、倒进另一个。a桶装的水*1000+b桶装的水作为当前状态hash值,利用hash值标记,已经搜索过的状态不再进行入队。可能操作次数很多,为了性能,存储操作时创建path元素,使用nxt记录路径进行拉链。除了AB容量为C时,只有在一个桶倒进另一个桶时才可能出现容量为C。AC代码#include <stdio.h>#incl...原创 2019-03-30 23:07:27 · 435 阅读 · 0 评论 -
Prime Path POJ - 3126 搜索
题解BFS按照题意进行搜索,尝试改变每一位数字,改变为0~9的数值,出现的数字不在入队,注意最高位数字不能为0。AC代码#include <stdio.h>#include <iostream>#include <queue>#define fst first#define sed secondusing namespace std;typed...原创 2019-03-30 22:54:02 · 352 阅读 · 0 评论 -
Find The Multiple POJ - 1426 搜索
题解如果直接枚举m的倍数,对于某些很大的答案时肯定会超时。DFS搜索19位用01组合出的十进制数字,直接对m取模检测是否满足为m的倍数。注意需要使用unsigned long long来保存数值(不断WA发现答案为19位)。AC代码#include <stdio.h>#include <iostream>#define fst first#define se...原创 2019-03-30 22:50:40 · 228 阅读 · 0 评论 -
Solitaire HDU - 1401 双向BFS
题解题目大意,一个棋盘上有四个旗子,给你当前状态和目标状态的旗子,每次可以移动一个旗子也可以跳过另一个旗子,问8次内是否能到达目标状态。只要常数压的好普通BFS也能过,这里使用双向BFS求解,从初始状态和目标状态同时搜索。节点记录四个点的位置和操作次数,排序后每个点占用两个10进制位,位压缩为8位10进制作为hash值用unordered_set判重。每个节点至多操作4次,当当前分支的ha...原创 2019-03-01 17:17:27 · 533 阅读 · 0 评论 -
Eight HDU - 1043 搜索 A* | 双向BFS
题解题目很明显使用搜索算法,普通BFS会导致超时,使用A*算法进行搜索。计算当前状态的每个数字直接移动到他应该在的位置需要的次数求和,作为A*算法的h函数值。画了几次找规律发现怎么移动逆序对都为偶数,所以特判当逆序对为奇数时不可行。在搜索过程中,已经搜索到的状态不再进行搜索,需要使用数组进行标记,由于0~8的全排列直接用2进制或10进制表示过大。使用康拓展卡进行状态压缩,将0~8的全排列...原创 2019-02-27 19:21:47 · 537 阅读 · 0 评论 -
牛客寒假算法基础集训营6 J 迷宫 搜索
题解因为在路径代价为1的情况下BFS最先到达的地方就是最优的,不会出现先如果能直接左走到却先右走走再左走走的情况,而且向上/下走又不能代替左/右走。所以只需要进行一次普普通通的BFS即可。直接在队列节点上加上两个标记,表示当前节点剩余的可以往左/右走的次数然后对第一次走到的节点ans++并且标记走过。AC代码#include <stdio.h>#include <bit...原创 2019-02-05 02:05:30 · 837 阅读 · 0 评论 -
Roads in the North POJ - 2631 树的直径 BFS | 树形dp
题解题目大意 给你n-1条带权边组成一个n个节点的树 题目没给n接收到文件尾 求这个树的直径 树的直径为树中两个距离最远点的距离方法1 两次BFS第一次任找一点为起点进行BFS得到最远的点p 点p一定为直径上的一个端点第二次以p为起点再次BFS得到最远的点q 并求出pq之间的距离即为树的直径AC代码#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;iostre...原创 2019-01-16 17:06:28 · 146 阅读 · 0 评论 -
“卓见杯”第五届CCPC中国大学生程序设计竞赛河南省赛-网络模拟赛 部分题解
题目链接A Mex Query#include <stdio.h>#include <bits/stdc++.h>#define fst first#define sed secondusing namespace std;typedef long long ll; const int INF = 0x3f3f3f3f;const ll LINF = 0...原创 2019-04-18 21:39:29 · 474 阅读 · 0 评论