上一页 1 ··· 5 6 7 8 9 10 11 下一页
摘要: 扩展KMP的应用 我们发现本题的关键在于如何高效的判断两个 同构字符串 的大小关系,想到如果能够预处理出每一个同构字符串与原字符串的最长公共前缀,那么直接比较它们不一样的部分就好,扩展KMP正好是用来处理这样的问题的,把原串copy一遍加在其后,在其上跑一遍exKMP的next数组,就预处理出了所有 阅读全文
posted @ 2017-12-07 22:00 Mr_Wolfram 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 扩展KMP解决这样一些问题: 给定两个字符串 S 和 T(长度分别为 n 和 m),下标从 0 开始,定义extend[i]等于S[i]...S[n 1]与 T 的最长相同前缀的长度,求出所有的extend[i]。 时间复杂度(n+m) cpp include include include inc 阅读全文
posted @ 2017-12-07 21:12 Mr_Wolfram 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 最大最小表示法与KMP求循环节 "最大最小表示法" 最大最小表示法与KMP求循环节的模板题, cpp include include include include include include using namespace std; const int MAXN=2000005; int in 阅读全文
posted @ 2017-12-07 14:25 Mr_Wolfram 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 最大最小表示法与去重 可以发现,题目中是求不同构环的数目,我们可以采用最大最小表示法,将它们都最大/最小表示出来,再判断有几个不同的, 可以使用string类,操作较为简单,也可以使用自定义struct 二维字符数组, 去重可以使用 sort+unique 可以使用 set 也可以字符串哈希 cpp 阅读全文
posted @ 2017-12-07 10:01 Mr_Wolfram 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 求最长回文子序列的 O(n)做法 "讲解" 阅读全文
posted @ 2017-12-04 19:19 Mr_Wolfram 阅读(209) 评论(1) 推荐(0) 编辑
摘要: 一道KMP的变式 本题仍是求最大前缀后缀,所以仍用KMP,但不同的是,本题有一个密码转换规则,不过好在题目中说了两段不重合,那么我们就可以在中间插入一个特殊符号' '',保证求next数组时不会越过中线,然后把前半段按对应关系转化成明文,求next数组就行,本题难点在于边界条件的处理。 尽可能向已知 阅读全文
posted @ 2017-12-03 21:53 Mr_Wolfram 阅读(125) 评论(0) 推荐(0) 编辑
摘要: KMP中next数组的妙用+DP 又是一道问前缀的题,显然是要用KMP,但是如果枚举每一个前缀,再到主串里跑KMP,会TLE,那么考虑DP,想到next数组的定义,并不用题目中的方法对于每一个前缀求在主串中出现了多少会,而是对于每一个前缀,求出以遍历过得前缀在该前缀中出现了多少次,所以dp[i]=d 阅读全文
posted @ 2017-12-03 20:19 Mr_Wolfram 阅读(145) 评论(1) 推荐(0) 编辑
摘要: KMP的应用 看到求字符串的的前缀与后缀,首先想到next数组,但是next所求的是同一个字符串中的最大前缀后缀,本题所求的是两个字符串中的最大前缀后缀,那么我们就求出第一个字符串的next数组,在第二个字符串上跑KMP,等到第二个字符串匹配完了以后,第一个字符串匹配到哪里就是所求的答案。 数组大小 阅读全文
posted @ 2017-12-03 19:28 Mr_Wolfram 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 这是一道利用KMP中next数组性质的题目,next[i]表示在字符串s中在i位置之前的的字符中的最大公共前缀后缀,那么我们就从nxt[len 1]开始 令k=nxt[len 1]判断是s[k]与s[len 1]是否相等,若相等则存下来,然后k=nxt[k],字符串的前缀一定是前缀的前缀。 阅读全文
posted @ 2017-12-02 10:53 Mr_Wolfram 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 这是一道求最小循环节的题,利用KMP的next数组求一个序列的最小循环节, 由next数组的定义可知,对于一个长为len的字符串来说,next[len]即为该字符串的最大公共前缀后缀, 所以该字符串的最小循环节为 len next[len], 本题因为对smemset置零,WA了好几次,但至今都不知 阅读全文
posted @ 2017-12-01 15:04 Mr_Wolfram 阅读(168) 评论(0) 推荐(0) 编辑
摘要: ```cpp include include include include include include const int MAXN=1000000+5; using namespace std; char s1[MAXN],s2[MAXN]; int nxt[MAXN]; void getn 阅读全文
posted @ 2017-11-30 20:40 Mr_Wolfram 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 首先,本题是一道最大子矩阵问题,且m,n较小,可以使用DP做, 与 洛谷 [P1387]最大正方形 做法相同。 include include include include include include using namespace std; const int MAXN=5005; int 阅读全文
posted @ 2017-11-29 20:04 Mr_Wolfram 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 【摘要】 本文针对一类近期经常出现的有关最大(或最优)子矩形及相关变形问题,介绍了极大化思想在这类问题中的应用。分析了两个具有一定通用性的算法。并通过一些例题讲述了这些算法选择和使用时的一些技巧。 【关键字】 矩形,障碍点,极大子矩形 【正文】 一、 问题 最大子矩形问题:在一个给定的矩形网格中有一 阅读全文
posted @ 2017-11-28 20:22 Mr_Wolfram 阅读(488) 评论(0) 推荐(0) 编辑
摘要: 本题是一道用极大化思想求最大子矩阵的经典题目。这个题目很出名,可以在百度搜索王知昆国家队dalao的论文,其中说的非常详细。 先枚举极大子矩形的左边界,然后从左到右依次扫描每一个障碍点,并不断修改可行的上下边界,从而枚举出所有以这个定点为左边界的极大子矩形。 需要注意的是,如果扫描到的点不在当前的上 阅读全文
posted @ 2017-11-28 20:14 Mr_Wolfram 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 本题虽然是在树上的问题,但仍是区间DP的基本思路,因为给定区间是树的中序遍历,所以我们枚举左右端点,dp[i][j]表示从i到j号区间所表示的子树的最大分数,在转移的时候枚举根节点k, 有转移方程 题目还要求输出先序遍历,只需在转移的时候更新root数组,rt[i][j]表示从i到j的区间所表示的子 阅读全文
posted @ 2017-11-27 21:30 Mr_Wolfram 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 本题是一道区间DP,很容易设计出状态, dp[i][j]代表关掉i到j的路灯所耗的电量,但是对于新到一个路灯来说,可以是原来直接来的,也可以是掉头来的,于是还需要添加一维 0代表在区间的左端,1代表在区间的右端。从最开始所在的地方扩展。 因为涉及连续区间,可以采用前缀和优化。 有如下转移方程: dp 阅读全文
posted @ 2017-11-27 20:17 Mr_Wolfram 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 对于noip时的程序要注意: 1.stdin stdout 要写对 2.文件名要写对 3.头文件能多写就不少写 "优秀的演算法笔记" "day1" "day2" "day3" "day4" "day5" "day6" 阅读全文
posted @ 2017-11-20 21:42 Mr_Wolfram 阅读(230) 评论(0) 推荐(0) 编辑
摘要: "题解:shawnZhou" "讲算法的BYVoid" "题解" (https://www.61mon.com/) 常见错误(http://blog.csdn.net/functionendless/article/details/78221717) http://cuitianyi.com/ 阅读全文
posted @ 2017-11-20 21:41 Mr_Wolfram 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 图论模板 LCA 离线 tarjan prim,复杂度与dijkstra相似,稍后再看 include include include include include include using namespace std; const int MAXN=5005,MAXM=200005; int 阅读全文
posted @ 2017-11-20 21:40 Mr_Wolfram 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 朴素的素数筛法中 bool chk(int x){ if(x==1) return 0; if(x==2)return 1;//一定要特判2 if(!(x&1)) return 0; int t=sqrt(x); for(register int i=3;i 阅读全文
posted @ 2017-11-20 21:39 Mr_Wolfram 阅读(186) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 下一页