现在位置: 首页 > 算法 > 文章
2019年08月20日 算法 ⁄ 共 1385字 评论关闭
这道题目觉得很经典,果断不会做,看了别人博客来了感觉才搞定的,是到模糊匹配的题目, 核心就是把给的三种替代字符,用另外三种替代,一个是必须匹配一个,一个是任意匹配,0到无限,一个是0或1匹配,然后利用背包就可以搞定 然后把字符串利用map映射为数字,三种替代为-1,-2,-3; dp[i][j]表示第一个字符串到i位,第二个字符串到j位能否匹配,自底而上更新即可。 #include<iostream> #include<cstdio> #inclu...
阅读全文
2019年08月20日 算法 ⁄ 共 1848字 评论关闭
题目链接:poj 1436 Horizontally Visible Segments 题目大意:给定n条垂直的线段,保证两两线段不重叠。问说有多少组三元线段可以互相看到。 解题思路:线段树+暴力。表示很不能理解的题目,复杂度略高。先将线段按照x坐标排序,然后为每个线段标号,从左向右每次修改区间。在修改之前查找一下该区间没有被完全覆盖的线段,用vector存小来,最后再暴力计数。 #include <cstdio> #include <cstring> #include &...
阅读全文
2019年08月20日 算法 ⁄ 共 1560字 评论关闭
题目链接:poj 2991 Crane 题目大意:就是有一个机械手臂,有n结,给定每节的长度,一开始为垂直的。有m次操作,每次将x关节变成角度d,并且输出手臂末端的坐标。 解题思路:点的旋转公式(r为逆时针的角度): x′=x∗cos(r)−y∗sin(r) y′=x∗sin(r)+y∗cos(r) 没有做过类似的题目,线段树每个节点记录的为每节旋转的角度以及单节末端的位置。每次旋转新的角度,需要根据前一个节点的角度和当前节点的角度来计算(因为它不是再...
阅读全文
2019年08月20日 算法 ⁄ 共 2028字 评论关闭
题目链接:poj 3225 Help with Intervals 题目大意:模拟集合操作,输出最终的集合。 解题思路:线段树。 U l r:[l,r]区间置为1 I l r:[0,l),(r,maxn]置为0 D l r:[l,r]区间置为0 C l r:[0,l),(r,maxn]置为0,[l,r]区间取逆 S l r:[l,r]区间取逆。 然后基本水水的线段树,注意一下区间开和闭。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn...
阅读全文
2019年08月19日 算法 ⁄ 共 1495字 评论关闭
poj 3667 Hotel 题目大意:给定一个区间,两种操作: 1 x:找到区间中最左边,将长度为x的区间放入,要求尽量靠左。 2 l r:清空l,r + l - 1这段区间。 解题思路:线段树的区间合并,每个节点记录S,L,R即可。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn =50005; int N, M; #define lson(x) ((x)<<1) #define rson(x) (((x)<<...
阅读全文
2019年08月19日 算法 ⁄ 共 954字 评论关闭
题目链接:poj 2001 Shortest Prefixes 题目大意:给定一个字符串集合,要求使得每个字符串尽量缩短,但是仍然能区分开。 解题思路:根据字符串集建立字典树,并且每插入一个字符串,所有路径上节点均加1,表示该子串是这个字符串的前 缀。然后对每个字符串进行一次查找,当碰到节点的统计值为1时,表示当前子串仅为该字符串的前缀,即为要找的字 符串。 #include <cstdio> #include <cstring> #include <...
阅读全文
2019年08月19日 算法 ⁄ 共 957字 评论关闭
题目链接:poj 2503 Babelfish 题目大意:给定若干个字符串间的映射关系,然后是若干次查询,每次查询一个字符串,判断该字符串是否有映射串, 有的话输出映射串,否则输出eh。 解题思路:字典树水题。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e6+5; const int maxm = 105; const int sigma_size = 26; struct Tire { int sz; i...
阅读全文
2019年08月19日 算法 ⁄ 共 1264字 评论关闭
题目链接:poj 2513 Colored Sticks 题目大意:有N个木棍,每根木棍两端被涂上颜色,现在给定每个木棍两端的颜色,不同木棍之间拼接需要颜色相同的 端才可以,问最后能否将N个木棍拼接在一起。 解题思路:欧拉通路+并查集+字典树。欧拉通路,每个节点的统计度,度为奇数的点不能超过2个。并查集,判断节点 是否完全联通。字典树,映射颜色。 #include <cstdio> #include <cstring> #include <string> #...
阅读全文
2019年08月19日 算法 ⁄ 共 1351字 评论关闭
题目链接:poj 1204 Word Puzzles 题目大意:给定一个有字符组成的N行M列的矩阵,就这是Q次查询,每次查询包括一个字符串,要求在矩阵中找到起 始点以及方向。 解题思路:对查询建立字典树,然后暴力枚举矩阵中的起点和方向。数据有点弱,就这样给过了。 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e6+5; const int maxc = 1005; const int ...
阅读全文
2019年08月19日 算法 ⁄ 共 1447字 评论关闭
题目链接:poj 1816 Wild Words 题目大意:给定N个模板,即正则表达式,然后每次有一个询问串,输出能被哪些模板匹配。 解题思路:对模板建立字典树,然后每次询问即在字典树做DFS搜索,注意'*'的情况,可以匹配一个和多个,所以在结 尾的时候要注意。并且,模板串有重复的情况。 #include <cstdio> #include <cstring> #include <set> #include <algorithm> using namespace std; const int ma...
阅读全文