搜索
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
Oil Deposits ZOJ - 1709
https://zoj.pintia.cn/problem-sets/91827364500/problems/91827365208 第一次用Python来A算法题 习惯问题 和用C写的大差不差的样子。。 import numpy as np import queue def bfs(e,book,n,m,x,y): next=[[0,-1],[-1,0],[0,1],[1,0],[-1,-1],[-1,1],[1,1],[1,-1]] que=queue.Queue().原创 2020-07-14 10:55:04 · 129 阅读 · 0 评论 -
Spy Syndrome 2 CodeForces - 633C
http://codeforces.com/problemset/problem/633/C 这里DFS的作用和for循环一样 复杂度有点迷。。 感觉是因为这里用了字典树来剪枝 匹配的要求比较严格 当前位置找不到就必须返回 #include <bits/stdc++.h> using namespace std; struct node { node *next[26...原创 2018-09-11 10:54:15 · 139 阅读 · 0 评论 -
序列分解 51Nod - 1400
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1400 想不到有多项式复杂度的办法 两个序列要完全一样 要求还是很严格的 并且n很小 考虑搜索 主要就是个数量剪枝 看剩下的数还能不能均分 #include <bits/stdc++.h> using namespace std; const int ...原创 2018-10-01 19:36:45 · 176 阅读 · 0 评论 -
六边形平面 51Nod - 1388
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1388 显然最多三种颜色 全部不相邻为1 两相邻就为2 三相邻就为3 然后WA 找了很久发现 三相邻就是一个奇圈的特例啊。。改成BFS判奇圈就好了 #include <bits/stdc++.h> using namespace std; typede...原创 2018-10-01 21:44:31 · 158 阅读 · 0 评论 -
Enigma Gym - 101889E
http://codeforces.com/gym/101889/attachments 求给定字符串所能表示的n的最小倍数 n很小 字符串也很短 都是1e3 可以想到记忆化搜索 即搜到当前位置时高位的模数是多少 如果之前在这个位置并以这个模数走下去没结果 那这次也一样 标记下只走一次即可 #include <bits/stdc++.h> using namespace std;...原创 2018-10-18 12:04:21 · 185 阅读 · 0 评论 -
Today Is a Rainy Day UVALive - 7263
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5275 给两个串s1 s2 有两种操作 一是把单个字符改变 二是吧一种字符改变 问最少几次操作将s2变为s1 第二种操作肯定是越多越好 预处理第二种操作各个状态与原...原创 2018-10-24 17:50:58 · 515 阅读 · 3 评论 -
Police Stations CodeForces - 796D
http://codeforces.com/group/CT2Mwjzqo4/contest/796/problem/E 有几个城市有警察局 就可以分成几棵子树 先把所有有警察局的城市扔到队列里 跑一边bfs 看没警察局的城市到哪个最近 这样就把这几个子树划分好了 #include <bits/stdc++.h> using namespace std; const in...原创 2018-11-09 15:21:39 · 168 阅读 · 0 评论 -
非回文 51Nod - 1523
https://www.51nod.com/Challenge/Problem.html#!#problemId=1523 没有其他好办法 那就考虑搜索 题目要求非回文 那就保证搜索到第i个位置时 所选字符与i-2和i-1位置的字符不一样 这样避免了出现长度等于2和3的回文串 长度更大的回文串就更不可能出现 但是爆搜肯定不行 发现按上述思路 第i个位置字符的选取只和i-2和i-1位置的字符有关...原创 2018-11-20 15:54:47 · 274 阅读 · 0 评论 -
Connections Gym - 101630C
http://codeforces.com/gym/101630/attachments 给m条有向边 选其中2*n条构成一个强连通分量 队友想到的 跑两遍以1为起点的bfs 第一遍在原图上选出n-1条边 保证1可达2-n 第二遍反向建图 保证2-n可达1 把两遍选中的边凑在一起 任一点都是与1互相可达的 那整个图就两两互相可达了 #include <bits/stdc++....原创 2018-11-22 08:43:06 · 166 阅读 · 0 评论 -
分考场 蓝桥真题
http://lx.lanqiao.cn/problem.page?gpid=T457 对于当前学生 先把他放到已经开的考场里 看是否和其他人都不认识 最后再尝试为他单开一个考场 这样很快就可以把n个学生都安置好 从而更新答案来剪枝 #include <bits/stdc++.h> using namespace std; const int maxn=1e2+10; i...原创 2019-02-25 19:00:12 · 257 阅读 · 0 评论 -
Treasure Map ZOJ - 3209
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3209 去年L队友写的舞蹈链 今年W队友写的搜索。。再水一次省赛 把右上角都存到左下角 按格子搜索 先行后列扫到的第一个空格子是必须要现在填满的 看有没有对应图案能填 搜满就更新答案 #include <bits/stdc++.h> using na...原创 2019-03-08 13:02:43 · 210 阅读 · 0 评论 -
完美正方形 蓝桥真题
题目略 搜索剪枝 每次从左上角开始一行行找 找第一个空白位置 看能不能放下某个正方形 当产生完全覆盖之后即找到答案 类似方法的题还有zoj 3209 两点注意 1 先对19个正方形升序排序 只要某个没用过得正方形放不下了 后边的肯定放不下直接跳过(如果是矩形就没法这样贪心) 2 如果初始标定的三个正方形放在了左上角 找第一个空白位置就从左上开始 如果放在了右下角 那就从右下开始 不然在很...原创 2019-04-13 19:44:46 · 197 阅读 · 0 评论 -
Garland CodeForces - 767C
http://codeforces.com/problemset/problem/767/C 找两个除根节点之外的点 将整棵树分为权值相等的三部分 两个点的关系 要么lca是两者其中一个 要么不是 对于第一种情况 在dfs时用栈保存权值为(2/3*tot)的点 如果遍历到某个权值为(1/3*tot)的点时战非空 则找到答案 对于第二种情况 对于遍历到的每棵子树 看它有多少棵子树含有权值为(...原创 2019-04-22 09:40:42 · 187 阅读 · 0 评论 -
凑平方数 蓝桥真题
题意有问题 明明应该是组间无序 却写成组内无序 坑的一批啊 先全排列 然后将每个排列都分成数份 因为组间无序 所以先排个序再去重 写这道题有两个智障错误 第一是忘开longlong 第二是排序时直接对dfs用的序列排序。。 还有注意遇到当前位置是0时要特殊处理 #include <bits/stdc++.h> using namespace std; typedef l...原创 2019-05-20 15:07:23 · 208 阅读 · 0 评论 -
磁砖样式 蓝桥真题
老套路 每次递归 都找最左上角的空白位置 这个地方是必须要填满的 如果放不下合适的瓷砖直接返回即可 具有很强的剪枝效果 递归时的参数为已铺的面积 若已铺满 则判重后累加答案即可 #include <bits/stdc++.h> using namespace std; const int maxn=20; map <int,bool> mp; int book...原创 2019-05-21 15:02:19 · 229 阅读 · 0 评论 -
Xor-Paths CodeForces - 1006F
http://codeforces.com/contest/1006/problem/F 爆搜复杂度2^(n+m) n和m都不大 可以考虑折半搜索 即从起点终点各走一半 #include <bits/stdc++.h> using namespace std; #define ll long long #define pil pair <int,ll> map &l...原创 2018-09-14 01:33:25 · 163 阅读 · 0 评论 -
Vitaly and Cycle CodeForces - 557D
http://codeforces.com/contest/557/problem/D 最后两分钟过掉D 真的刺激 如过所有点都是孤立点 就是n选3 此时连边数为3 如果连通块中的点数最多为2 那就将图分为两个集合 点数为1的记为s1 点数为2的记为s2 s2中任意一个都可以和s1中任意一个相组合 s2中两两组合产生四种 此时连边数为2 否则 先求个生成树(森林) 用剩下的边判奇圈 即两点...原创 2018-09-15 02:09:55 · 135 阅读 · 0 评论 -
War Chess HDU - 3345
点击打开链接 需要通过优先队列(堆) 将行动力最大的点放在堆顶 优先将其向四周扩展 其中P(同伴点)与E(敌对点)需注意 当行动力为0时P不可进入 而当某个点四周有E时 则行动力归零 因此P与E若相邻 则P不可进入 但这种情况不必考虑 因为P是不可停留的 即该点是无法改变的 如果没有通过P成功向四周扩展 则等同于P没有被遍历过 注意: 不可用普通BFS是因为此地图上进入每个点消耗的...原创 2017-07-21 12:26:05 · 502 阅读 · 0 评论 -
Superbot ZOJ - 3865
点击打开链接 在任何一个位置上 如果其转向与到达时间对p取模后的状态在之前已经存在 那就没必要再走一遍 开个四维数组标记一下即可 还有就是注意 next数组中存的方向必须与题目给定顺序一致 #include <bits/stdc++.h> using namespace std; const int maxn=10+10; const int maxm=50+10; s...原创 2018-04-25 08:26:02 · 157 阅读 · 0 评论 -
白色相簿 计蒜客
如何判断一个图中是否存在三元环 先bfs全图 得到一颗bfs树 然后用O(N+M)的方法遍历全图 若相邻两点且深度相同 那一定存在三元环 因为无论从哪一个点进入三元环 另外两点在bfs树中的深度必然相同 #include <cstdio> #include <queue> #include <cstring> #include <algor...原创 2018-04-09 22:10:33 · 231 阅读 · 0 评论 -
Eight POJ - 1077 (HDU - 1043)
点击打开链接 普通bfs预处理 通过康拓展开进行状压 找出所有符合题意的排列 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct node { int val; int id; char ...原创 2018-03-08 14:49:11 · 203 阅读 · 0 评论 -
Help Jimmy POJ - 1661
点击打开链接 两种解法 一:记忆化搜索 写法其实很多 一个搜索题一般写法很多理清思路 各种边界处理好就行 不要一会觉得这样行 过一会觉得那样好 反而搞乱了思路 #include <stdio.h> #include <cstring> #include <algorithm> using namespace std; #defin...原创 2017-11-18 16:17:51 · 256 阅读 · 0 评论 -
生日蛋糕 POJ - 1190
点击打开链接 参考博客点击打开链接 还是有些迷。。留坑 前两个剪枝是看在当前情况下能不能构成一个蛋糕 第三个剪枝是看当前情况下能不能形成最优解 #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std;...原创 2017-11-07 15:20:36 · 172 阅读 · 0 评论 -
Escape HDU - 3533
点击打开链接 感觉这题不太好写。。 学别人用三维数组标记才过的。。 还有 注意bfs时要枚举时间 看当前时间下能否到达终点 有点类似于dfs的迭代 #include <bits/stdc++.h> using namespace std; struct node1 { int d; int t; int v; int x; in...原创 2017-11-04 15:46:22 · 280 阅读 · 0 评论 -
Fliptile POJ - 3279
点击打开链接 第一行的每个格子按或不按两种选择 m列则有2^m种情况 通过dfs确定 每一个元素都只能通过按下下一行的同列格子来改变 最后看一下第n行是否全为0即可 #include <stdio.h> #include <cstring> #include <algorithm> using namespace std; #define N 0x...原创 2017-11-03 21:49:33 · 187 阅读 · 0 评论 -
Gap HDU - 1067
点击打开链接 第一次用哈希 感觉和状压就是一回事。。 #include <bits/stdc++.h> using namespace std; #define M 1000007 struct node { int t[10][10]; int s; }; queue <node> que; int num[10][10],tar[10][10]...原创 2017-11-03 20:26:22 · 313 阅读 · 0 评论 -
DNA sequence HDU - 1560
点击打开链接 算是搜索进阶题吧(发现自己搜索要学的东西还很多啊 到现在才开始进阶。。) 枚举搜索深度(可二分) 看当前深度下是否可以解决问题 这道题目中还需要剪枝 若剩下所需匹配数大于剩余步数 则无解 提前返回 #include <bits/stdc++.h> using namespace std; int len[10]; int n,lim,flag; char...原创 2017-10-31 16:31:13 · 390 阅读 · 0 评论 -
帅气的HYC迷路了 QDU
点击打开链接 这个题主要是第一问 要按照要求的规则走到目的地 刚接触搜索算法没多久时做了这道题 当时感觉很懵逼 模拟第一问过程的思路都是错的 现在再看这个题.. 还是有一些小细节需要注意 先DFS模拟第一问过程 注意不可用传参方式记录路长 因为折返时额外走的弯路也要计算在内 最后BFS求最短路程即可 #include <stdio.h> struct node {...原创 2017-07-29 13:55:24 · 298 阅读 · 0 评论 -
Find The Multiple POJ - 1426
点击打开链接 利用了同余定理 (a*b)%m=((a%m)*(b%m))%m (a+b)%m=a%m+b%m; 在这里 判断一个较大数是否为目标数n的倍数时(即%n) 等同于判断较大数的两个因子是否为目标数n的倍数 类似于快速幂的思想 基于这个规律 我们从高位开始构造这个数(最高位必是1) 而下一位有两个选择 因此采用DFS 如 目标数为8 当前已构造的数为1011 继续构有10110...原创 2017-07-29 11:08:22 · 227 阅读 · 0 评论 -
非常可乐 HDU - 1495
点击打开链接 三个杯子 就开三维的关系矩阵表示三者之间的关系 通过BFS来遍历关系矩阵 若由三杯水分别为 x1 y1 z1 的状态 经过互相倒水的合法操作后 可以变为 x2 y2 z2 的状态 则e[x1][y1][z1]与e[x2][y2][z2]之间有关系 相当于(x1,y1,z1)与(x2,y2,z2)两点之间联通 继续遍历 直到找到题目所给目标状态为止 虽然BFS写的比较麻烦 但...原创 2017-07-28 15:54:32 · 220 阅读 · 0 评论 -
The Tag Game CodeForces - 813C
首先 想要尽可能拖延游戏时间 Bob必须躲在一个离Alice尽可能远的叶节点(度为1) 而怎样知道两人分别到每个叶节点的距离呢? 分别以两人位置为根 递归遍历整张树图 节点在第几层递归遇到 它就在第几层 离根节点的距离就是多少 再以与Alice距离为依据 将所有叶节点排序 距离长者优先考虑 但可能在Bob前往该地时会被Alice截击 也就是说Alice离该点更近 这条路行不通 考虑...原创 2017-07-28 09:18:13 · 222 阅读 · 0 评论 -
Ignatius and the Princess I HDU - 1026
点击打开链接 还是bfs+优先队列 难点就是保存节点 此题用STL的优先队列 但麻烦就是弹出的节点无法保存 求路径比较麻烦 不用STL的话模拟这个过程又太麻烦.. 最后想出再开个专门存 路径中某节点的父节点位置 的二维结构体数组 虽然由起点至终点每个点最多可向三个方向各自扩展出一个子节点 哪个方向的子节点才是最短路径中的节点无法确定 但是从终点回溯 其父节点是唯一的 因此最终递归输出...原创 2017-07-23 18:47:18 · 207 阅读 · 0 评论 -
Problem J. Let Sudoku Rotate HDU - 6341
http://acm.hdu.edu.cn/showproblem.php?pid=6341 搜索题。。 可行性剪枝结合最优解剪枝 说着简单 比赛都没敢往搜索想 直接跳了。。 #include <bits/stdc++.h> using namespace std; int mp[300]; int ans; char ch[20][20]; void init() { ...原创 2018-08-03 00:18:58 · 157 阅读 · 0 评论