曾任职于阿里巴巴,现就职于美图,专业搬砖100年~
暂时未有相关通用技术能力~
阿里云技能认证
详细说明点击打开链接hdu 2328 思路:kmp+暴力枚举子串 分析: 1 题意要求最长的公共子串,由于每一串的长度最长不超过200,所以可以选择暴力枚举最短的单词的子串来求出ans 2 利用kmp来匹配 代码: #include #...
点击打开链接hdu 1238 思路:kmp+暴力枚举子串 分析: 1 题目要求找到一个子串x,满足x或x的逆串是输入的n个字符串的子串,求最大的x,输出x的长度 2 题目的n最大100,每一个字符串的最大长度为100,那么暴力枚举子串就是o(n^2)才10000肯定是不会超时的,但是由于这里涉及到了逆串的问题,所以我们应该还要求出n个子串的逆串,然后在求最大的x。
点击打开链接hdu 4300 思路:kmp+next数组的应用 分析: 1 题目要求的是给定一个不完整的由n个字符构成的字符串并且字符串有密文和明文两部分组成,现在要求完整的字符串。
点击打开链接hdu 3336 思路:kmp+next数组的应用 分析: 1 题目要求的是给定一个字符串s,求字符串s的所有的前缀在s的匹配的次数之和mod10007. 2 很明显n1,为什么要从n开始而不是1开始呢,这里因为是要求前缀的匹配数而不是后缀; 4 求sum的时候注意每一步都有可能超过范围,所以就要求一次sum同时取模一次。
点击打开链接hdu 2594 思路:kmp+next数组的应用 分析: 1 题目要求的是给定两个字符串s1 , s2找到s1的最长前缀等于s2的后缀 2 很明显就是next数组的应用,我们知道next[j] = len,表示的前j个字符里面前缀和后缀的最长匹配长度为len。
点击打开链接poj 3080 思路:kmp+子串枚举 分析: 1 题目要求的是给定m个DNA序列,每个DNA序列长度固定为60,问m个DNA序列的最长的公共子串 2 初看题目无从下手,但是你仔细研究发现是要找m个序列的公共子串,那么这个子串必定存在于第一个DNA序列里面。
点击打开链接poj 2752 思路:kmp+next数组的应用 分析: 1 题意要求的找出满足既是字符串的s的前缀又是后缀的字串输出该字串的长度。
点击打开链接poj2406 思路:kmp+最小循环节 分析: 1 题目要求的是给定一个字符串找到最小循环节的个数,但是这里有个限制的地方就是如果这个字符串不是刚好由n个最小循环节组成那么就认为一整串才是一个循环节 2 题目说了输入的字符是可打印的,所以应该用gets读入,判断终止的时候用strcmp。
点击打开链接hust1010 思路:kmp+最小循环节 分析: 1 题目要求的是,有一个字串A,现在利用A组成了一个新的字符串AAAAA...,现在从这个新的字符串的两个不同位置剪下去得到字符串B,问A的最小长度 2 由于B里面的字符都是来自A,那么如果要A最小那么最小值就是等于B的最小循环节。
点击打开链接hdu 2203 思路:kmp 分析: 1 题目要求的是给定字符串s1 和 s2,问s1能否通过移位得到使得s2包含在s1里面。
点击打开链接hdu 1358 思路:kmp+最小循环节 分析: 1 题目要求的是给定一个长度为n的字符串,求出字符串的所有前缀字符串中该字符串刚好由k个最小循环节够成,由于题目要求k最大那么就是这个循环节最小 2 只要先求出next数...
点击打开链接hdu 3746 思路:kmp+字符串的最小循环节问题 分析: 1 题目要求的是给定一个字符串,问我们还需要添加几个字符可以构成一个由n个循环节组成的字符串。
点击打开链接hdu2087 思路:kmp 分析: 1 题目要求的是给定一个文本串和给定一个模式串,求文本串中有几个模式串。 2 注意文本串为"aaaaaa",模式串"aa"的时候,ans = 3 而不是5。
点击打开链接hdu 1686 思路:KMP 分析: 1 题目要求的是给定一个模式串个一个文本串,求出模式串在文本串中出现几次 2 典型的KMP问题,只要套上模板即可。
点击打开链接hdu1711 思路:KMP kmp算法: 1 kmp是用来匹配字符串,只能够匹配单一的字符串 2 kmp的算法的过程: 1:假设文本串的长度为n,模式串的长度为m; 2:先例用O(m)的时间去预处理next数...
点击打开链接hdu 3742 思路:字典树 分析: 1 题目给定n个单词,有m次的询问。每一次的询问会有k个长度为8的条形码,条形码是8个double组成。
点击打开链接hdu3640 思路:字典树 分析: 1 题目要求的是给定n个字符串,现在有一台的打印机有三种操作“取字符”,“删除最后一个字符”,“打印当前单词”,问最少需要几次的操作(最后一个单词不用删除)。
点击打开链接hdu 1298 题意:题目说的是在那遥远的星球有一款叫诺基亚的手机,键盘采用题目的图的样式。给定n个单词的出现的概率,规定是相加的比如hell出现为4,hello概率为3则hell的概率为7。
点击打开链接hdu 4430 思路:枚举r+二分k 分析: 1 题目要求的是找到一组最小的r*k,如果r*k相同那么就找r最小的。 2 很明显k>=2,根据n
点击打开链接hdu 1857 思路:字典树 分析: 1 题目要求的是给定的单词第一个字母在这个矩形里面的最小的坐标 2 矩形的最大500*500,单词的来源有三个方向,并且单词的起点和终点在矩形之内都是可能的。
点击打开链接hdu1305 思路:字典树 分析: 1 题目要求的是是否有一个字符串作为其它字符串的前缀 2 利用字典树的性质在插入的时候就可以判断某一个字符串是否是其它字符串或当前字符串是其它字符串的前缀 3 多组数据利用静态分配不能用动态分配。
点击打开链接hdu 2846 思路:字典树 分析: 1 题目要求的是给以个询问字符串s,在n个物品中找到总共有几个满足s是物品名字的字串。
点击打开链接hdu 1671 题意:给定n个电话号码串,问这n个电话号码串中是否存在某一串是其它串的前缀,如果存在输出NO,否则YES 思路:把这n个电话号码串建立成字典树,在插入的时候我们直接判断当前插入的字符串是不是其它串的前缀或者其...
点击打开链接hdu 1247 题意:给定一序列的单词按照字典序输入,要求某些单词是由这其中的其它两个单词拼接而成的单词按照字典序输出 思路:把输入的单词建立成一棵字典树,然后顺序枚举这n个单词并判断即可 代码: #inclu...
点击打开链接hdu 1385 思路:最短路+SPFA+路径记录+路径字典序比较 分析: 1 题目要求的单源的最短路,所以可以选择任意一种单源最短路来求解 2 题目还要求在路径和相同情况下要字典序小的,那么就要在更新dis数组的时候进行更新路径,如果是dis[i]>tmp,那么直接更新;如果是dis[i] == tmp的情况下,那么就要求出star->i 和 star->x的路径进行比较,然后判断能否更新. 3 注意询问的时候可能问的是同一个点。
点击打开链接hdu 1224 思路:最短路+SOFA 分析: 1 提要要求的最大的环,蛋并不是这么的复杂,因为第一个点的points值为0,所以其实就是求1到某一个点的最长路,其实就是最长路问题 2 注意的是在求1到某一个点的最长路的时候还要注意这个点是否能够到达1点,这个可以用一个mark数组来标记 3 可以更简单的做法就是1-n+1的最长路。
点击打开链接hdu 1869 思路:最短路+floyd 分析: 1 题目是要求所有的数据能否满足“六度分离”,那么我们就想到所有点之间的最短距离。
点击打开链接hdu 3631 思路:最短路+floyd 分析: 1 题目给的n
点击打开链接hdu 1839 思路:最短路+SPFA+二分查找 分析: 1 题目要求的是在限制时间t之内,最大的容量。而题目说了最大的容量就是路径上的最小的边值。
点击打开链接hdu 3986 思路: 最短路+Dij+优先队列 分析: 1 题目要求的是删除一条之和的最坏情况,并不是删除一条边之后的最短路(WA了好久不解释)。
点击打开链接hdu 1599 思路:最短路+floyd+最小环 分析: 1 题目要求的是能否有从某一个点出发至少经过两个不同点然后回到源点,有的话求最小路径长度。
点击打开链接hdu 1595 思路:最短路+优先队列+Dijstra+枚举边 分析: 1 题目要求的是删掉一条边之和求出的最短路中的最大值。
点击打开链接hdu 2807 思路:最短路+floyd+矩阵乘法 分析: 1 题目明确要求x->y是否有了,而且有多次询问,所以序则floyd 2 题目给的点的形式是矩阵,所以还要去处理矩阵,判断A*B=C 3 题目说了A B C三...
点击打开链接hdu 3339 思路:最短路+floyd+0/1背包 分析: 1 这一题多了一个限制条件能量,即每一点都有一个自己的能量值。
点击打开链接hdu 2923 思路:最短路+SPFA / 最短路+floyd 分析: 1 题目要求的是有n个点,然后有c个破车,这个c个破车可能在同一城市里面,现在要把这些破车统一拉到中心点1. 2 这题的中心在1点,那么所求 ans = 1->所有破车的距离之和 + 所有破车->1的之和。
点击打开链接hdu 2680 思路:最短路+SPFA 分析: 1 题目要求的是从某一个站点能否到达目标站点 2 题目的其实站点有多个,如果都对每一个站点进行SPFA的话那么肯定TLE的。
点击打开链接hdu 1546 思路:最短路+SPFA 分析: 1 只要建好图,然后利用SPFA求解最短路即可。注意字符串的处理 2 定义一个char ch[10]数组,如果给数组的每一个元素值赋值后,还要记得要在最后ch[9]添加‘\0’,表示结束。
点击打开链接hdu1535 思路:最短路+SPFA 分析: 1 题目要求的是总的最小的花费,意思就是要求每一个人的花费都最小。 2 由于每一个人都是从1出去,最后还是都要回到1的,那么求解的时候就要分成两部分“出去+回来”;出去的话直接利用SPFA(1),1作为起点即可求出每一点的最小花费,回来的话如果是直接利用对每一个人进行SPFA,那么这样肯定超时。
点击打开链接hdu 1245 思路:最短路+floyd 分析: 1 题目讲的是有一个湖100x100这个人刚开始在一个直径为15的圆心在原点的园内,然后要通过跳跃的方式问我们他是否能够到达岸边。
点击打开链接hdu 1217 思路:最短路变形题(floyd 或 SPFA) 分析: 2 题目要求的是经过一轮的转换之后,原来的比例能够大于1。
点击打开链接poj 1986 思路:LCA+Tarjan离线算法+并查集 分析: 1 LCA指的是一棵有根树上两个点的最近公共祖先,或者指的是图上两个点的最短路径。 2 这一题的边数最大40000,还有k(k
点击打开链接poj 1470 思路:LCA+Tarjan离线算法 分析: 1 处理输入的时候全部用scanf,不然会WA。注意掌握scanf的使用,scanf的灵活之处 2 因为有多次询问,所以要开个ans数组记录公共祖先的次数 3 有关字符串的处理: 1 空白字符会使scanf在读入的时候略去其中的一个或多个空白字符 。
LCA是用来求解一棵树或图中两点的最近公共祖先 LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点。
点击打开链接poj 1330 思路:LCA+离线Tarjan算法 分析: 1 LCA用于找到一棵树或者一个图中找到两个节点的最近的祖先问题。
点击打开链接hdu 2112 思路:最短路 分析:只要把名字映射成整数,然后利用整数去求解即可。 注意事项: 1 题目中的起点和终点可能相同,这个时候输出0。
点击打开链接hdu 2066 思路:最短路+Dijkstra 分析:题目给定的起点有s个,终点有d个。要求找到从起点到这些终点最短的路径。很显然只要枚举起点然后比较最后得到最小的值。
点击打开链接hdu 1548 思路:最短路+Dijkstra 分析:数据量不大直接Dijkstra即可,但是注意要把图处理成有向图,因为题目中的电梯是有分上下两个分向的。
点击打开链接poj1639 思路:最小k度限制生成树 解题步骤: 1. 先求出最小 m 度限制生成树: 原图中去掉和 V0 相连的所有边,得到 m 个连通分量,则这 m 个连通分量必须通过 v0 来连接,所以,在图 G 的所有生成树中 dT(v0)≥m 。
点击打开链接poj 3723 思路:kruskal + 最小生成树 分析: 1 首先我们应该区分开男孩和女孩,只要将男孩的编号加上女孩的个数n,这样就可以做到男孩和女孩的编号是不同的。
点击打开链接poj 3522 思路:kruskal + 枚举生成树 分析:题目要求的是找到一个生成树使得生成树中“最大边-最小边”的值最小。