-
poj 2185 题目链接 题意:给出一个字符矩形,问一个面积最小的矩形,覆盖掉整个矩形。大概就是二维的最小覆盖子串。 思路:对于每一行做最小覆盖子串,然后求lcm,每一列也是如此。最后记得判断不能超过原有的n,m。 /* *********************************************** Author :111qqz Created Time :2016年08月10日 星期三 23时46分47秒 File Name :code/poj/2185.cpp ************************************************ */ #include <cstdio> …
Read More -
参考资料(本文大部分是参考这篇博客,附带一些证明步骤的解释) 首先明确一些概念: 最小覆盖子串:对于某个字符串s,它的最小覆盖子串指的是长度最小的子串p,p满足通过自身的多次连接得到q,最后能够使s成为q的子串。 比如: 对于s="abcab",它的最小覆盖子串p="abc",因为p通过在它后面再接上一个p(即重叠0个字符),可以得到q="abcabc",此时s是q的子串。 对于s="ababab",它的最小覆盖子串为p="ab"。 pre[i](或next[i])的实质是串str[1..i]的最长且小于i的“相等前、后缀”分别 …
Read More -
poj 2752题目链接 题意:求出所有的前缀和后缀相同的子串的长度。 思路:求出nxt函数,观察发现,从从len递归向前就是答案。 /* *********************************************** Author :111qqz Created Time :2016年08月10日 星期三 21时05分52秒 File Name :code/poj/2752.cpp ************************************************ */ #include <cstdio> #include <cstring> #include …
Read More -
hdu1686 题意:给出模式串和文本串,问模式串在文本串中出现了多少次,可以overlap. 思路:思考naive的匹配过程。nxt函数不过是改进了当失配发生时,不是移动1位,而是移动多位。nxt函数的含义是当失配发生时,移动到的位置....所以有的教程管这个叫失配函数吧,也不是很难理解的样子。 学会kmp之后的第一道kmp,嘿嘿嘿(是的,poj2406的时候我并不会kmp 2333) /* *********************************************** Author :111qqz Created Time :2016年08月10日 星期三 20时02分33秒 File Name …
Read More -
20170801update:当时竟然没有强调next函数的含义? next[i]的含义是,i之前的整个前缀中,最长的该前缀的前缀和后缀相同的长度。 看图: KMP感觉是我学到现在最难懂的一个算法了QAQ 为什么你们都那么强啊,看几个小时就看懂了... 先放一波我觉得值得看的资料: kmp算法讲解(配图比较全....) kmp学习资料2 说下我对kmp算法的理解: 理解kmp算法大概分成两个部分。 一部分是理解一个naive的kmp算法,可以叫"fast slide" algorithm 思想大概就是,当mismatch发生时,我们并不是一无所有,而是知道在mismatch发生前所匹配的字符的信息的。 然后知 …
Read More -
hdu 3415 题意:给出n个整数,是一个环(也就是a[n]右边是a[1])求一段长度不超过k的数使得和最大,问最大和是多少并给出这段数的位置。 思路:为了处理环,先把n个数复制一下就好,然后求前缀和sum[i] 由于区间[l,r]的和可以用前缀和表示为sum[r]-sum[l-1] 因此在区间长度小于等于k的前提下,我要求sum[r]-sum[l-1]的最大值,如果我们考虑把端点r固定,那么就是要求[l-1,r-1]中的sum的最小值。 因此我们考虑用单调队列来维护sum[i-k]到sum[i-1]的最小值。 我们的做法是:枚举区间右端点i,同时用单调队列维护i之前的k个数[i-k,i-1]的最小值。 由于要求“If there …
Read More -
ural 1126 题意:n个数,求从第k个元素开始,求每k个元素的最大值(一共求n-k+1次) 思路:单调队列。 单调队列学习链接 其实单调队列挺容易的理解的。。。当时觉得写不明白大概是因为看到的代码写得太丑了2333 说下我的理解: 单调队列的尾端(就是后进入元素的那一端)其实和单调栈类似。 首端加了个元素期限的概念,不断删除“过期”的元素。 所谓过期的元素,对于这道题来说,当我往前移动到第k+1个元素的时候,第1个元素就是过期了的元素,堆答案不会再有贡献。 理论上单调队列中的元素是<元素的期限,元素>的二元组。 而一般元素的"期限"是由下标的位置决定的,而得到下标就可以知道元素。 所以我们实际操 …
Read More -
hdu 1559 题意:给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 思路:二维前缀和就好。。。和单调栈没有半毛钱关系吧。。。 /* *********************************************** Author :111qqz Created Time :2016年08月03日 星期三 21时08分18秒 File Name :code/hdu/1559.cpp ************************************************ */ #include <cstdio> #include <cstring> …
Read More -
poj 3494 题意:给出一个n*m个0-1图,求最大的全部由1组成的矩阵。 思路:同poj 1964,一共做n+2×m次单调栈。。。数组开小re一发。。某处stk忘记清空re 1发。。。智力-2.。。3A /* *********************************************** Author :111qqz Created Time :2016年08月03日 星期三 19时33分14秒 File Name :code/poj/3494.cpp ************************************************ */ #include <cstdio> …
Read More -
poj 2796 题意:给出一个人n(1E5)天的情绪值(0..1E6),一段时间的value的定义是这段时间的情绪之和*这段时间情绪的最小值。 现在求value的最大值,并且输出得到这个最大值的区间。 思路:单调栈。 考虑把每一天作为最小值的时候能向左向由延伸的最远的点的下标,两个方向各做一次单调栈来预处理。和的haunted前缀和搞下。。 然后最后想着了LL,但是读入的时候前缀和的那里忘了LL wa了一发。。。2A /* *********************************************** Author :111qqz Created Time :2016年08月03日 星期三 19时14分42 …
Read More