摘要:水题,我A水题我快乐,哈哈,不过两次提交的时间分别是16ms和0ms,晕了[代码]
阅读全文
摘要:解题思路:将原数组每一位减去前一位得到新的数组B,题目转化为求解不小于3的不重叠最长重复字串代码
阅读全文
摘要:解题思路:将所有串链接在一起,中间用不同的分隔符分割,求解后缀数组Height,二分求解连续长度>=k的公共子串是否包含了所有情况。代码
阅读全文
摘要:解题思路:穷举长度为1到n/2的子串(L),如果子串连续出现两次以上,则两个连续的字串必定经过r[0],r[L],r[L*2]...中相邻的两个,所以在r[L*i]和r[L*(i+1)]分别往前和往后匹配。代码
阅读全文
摘要:解题思路: 建立trie图,我们可以假设起点均为root节点,题目转化为求解root经过m步到达所有节点的总和 dp求解,如果存在i->j的路径,counter[m, j] += counter[m-1, i];初始条件为counter[0, root] = 1; 显然,还需要使用高精度代码如下:代码
阅读全文
摘要:解题思路:建立输入单词(反向,便于寻找起始点所在的位置)的AC图,然后按照八个方向依次寻找(注意方向也为方向)。例如A是向上方向,我们需要改为反向,向下。那么我们需要将每列--从上到下方向--组成的字符串--共width个--分别到AC图中查找匹配。关键代码已经注释[代码]
阅读全文
摘要:转自==有限层数和蛋数,求即使最坏情况下需要的最少判断次数==两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。(参见[两个鸡蛋--一道Google面试题])这是典型的动态规划问题。假设f[n]表示从n层楼找到摔鸡蛋不碎安全位置的最少判断次数。假设第一个鸡蛋第一次从第i层...
阅读全文
摘要:~~转载~~计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模板一般就不成问题了。精度问题则不好说,有时候一个精度问题就可能成为一道题的瓶颈,简直“画龙点睛”。这些年的题目基本是朝着越来越不卡精度的方向发展了,但是也不乏一些%^&%题#$%$^,另外有些常识不管题目卡不卡,都是应该知道的。今天我就开膛回顾下见过且还有印象的精度问题,由于本人见...
阅读全文
摘要:#include <iostream>using namespace std;/************************************************************************//* Name: GetExtendNext/* Description: Get Next Array/* Parameter List: mode - substring/* next - array to get next[] of substring/* strlen - string len...
阅读全文
摘要:转自银河里的星星涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用。当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟悉的大概是kmp,即使如此还是有相当一部分人也不理解kmp,更别说其他的了。当然一般的字符串问题中,我们只要用简单的暴力算法就可以解决了,然后如果暴力效率太低,就用个hash。当然hash也是一个面试中经常被用到的方法。这样看来,这样的一些算法和数据结构实际上很少会被问到,不过如果使用它们一般可以得到很好的线性复杂度的算法。老实说,我也一直觉得字符串问题挺复杂的,出来一个如果用暴力
阅读全文
摘要:解题思路:trie树+排序,理论上效率应该不错,不过可能由于new过于平凡,效率不是很高,还不如长度排序之后直接搜索完整代码如下:代码
阅读全文
摘要:解题思路: 首先添加两个超级节点S,E,分别表示起点和结点 如果某个节点(i)不存在输入为1的条件,则添加一条S->i路径,容量为Qi; 如果某个节点(j)输出全为1,则添加一条j->E路径,容量为Qj; 如果节点i的输出与j的输入不存在冲突(输出与输入对应位置的和不能为1),则添加一条i->j的路径,容量为min(Qi, Qj).代码实现:代码
阅读全文
摘要:建立在Ford-Fulkerson 方法上的增广路算法,与一般的Ford-Fulkerson 算法不同的是,它用广度搜索实现对增广路的寻找[代码]
阅读全文
摘要:解题思路:首先添加两个节点,分别为起始点S,终点T,如果节点为power station,则添加一条S到当前节点的路径(路径容量为该节点的生产能力);如果节点为consumer,则添加当前节点到T的一条路径(路径容量为该节点的消费能力),则问题转化为求解S到T的最大流问题。代码如下:[代码]
阅读全文
摘要:思想:a)原图中的点按照到到源的距离分“层”,只保留不同层之间的边的图b)根据残量网络计算层次图c)在层次图中使用DFS 进行增广直到不存在增广路d)重复以上步骤直到无法增广1-递归实现,效率略低[代码]2- 非递归实现,效率较高[代码]
阅读全文
摘要:解题思路:求解最大独立集,转而求解最小顶点覆盖->最大流问题[代码]
阅读全文
摘要:解题思路:将行列分别对应二部图的两个set(行,列)->(left, right),问题转化为最小顶点覆盖问题,进而转化为求解最大流问题[代码]
阅读全文
摘要:解题思路:每增加一个点,均判断其拓扑排序,如果首先发现可以排序的情况,则不管后面的输入情况是否出现环。[代码]
阅读全文
摘要:解题思路:BFS 找出所有点之间的最短距离,Prim求解最小生成树[代码]
阅读全文
摘要:解题思路:Prim算法求解最小生成树,[代码]
阅读全文
摘要:解题思路:prim算法求解最小生成树[代码]
阅读全文
摘要:解题思路: Bellman-Ford算法,求解负权回路问题,考虑到图的不连通性,添加一个超级初始点,到各顶点汇率均为1:[代码]
阅读全文
摘要:解题思路: 首先Floyd算法求出所有顶点之间的最小距离,计算最小最大距离[代码]
阅读全文
摘要:解题思路:最短路径dijkstra算法[代码]
阅读全文
摘要:解题思路:首先添加一个超级原点0,到各个点的距离分别为各物品的价格,从0点出发,找到到达1点的最短路径枚举所有等级区间[代码]
阅读全文
摘要:类似于 POJ1860 求解负权回路问题,不过考虑到图可能不连通,所以需添加一个超级节点,与各顶点的初始距离均为1000[代码]
阅读全文