hihocoder
文章平均质量分 75
silent56_th
大学生一枚,对机器学习、图像处理感兴趣,偶尔也会刷刷leetcode或者hihocoder。希望在这里可以和大家多多交流,互相学习。
展开
-
[hihocoder1015]KMP
这里只是对于KMP的简单定义与实现代码,具体请参照hihocoder的官网问题简介给定模板串(代码中定义为temp),以及原串(代码中定义为str),求temp在str中出现多少次(可重叠)。 详情请参照hihocoder的官网,上面也有详细的KMP介绍。实现思路提前处理模式串,减少重复匹配的次数,时间复杂度是O(len(temp)+len(str)),具体证明待研究。 首原创 2016-11-30 15:37:17 · 442 阅读 · 0 评论 -
[hihocoder1066]无间道之并查集
问题描述就是并查集的简单应用。详情请参考hihocoder官网。算法详解每个节点存储两个数值,其父亲节点的位置以及类别内部节点的个数。其中父子节点位于一个类别,而类别内部节点数只对根节点有意义。1. 寻找根节点根节点的位置可以用于区分两个节点的类别。所以寻找根节点是个十分常见的操作,这里使用递归实现,同时加入短路,减少平均复杂度。int find_root(int i){原创 2016-12-17 20:46:25 · 364 阅读 · 0 评论 -
[hihocoder taige 20-1]括号配对
问题描述题目1 : Parentheses Matching 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given a string of balanced parentheses output all the matching pairs.输入 A string consisting of only parentheses ‘(’ and ‘)’.原创 2016-12-27 19:29:58 · 528 阅读 · 0 评论 -
[hihocoder1318]非法二进制数
问题描述时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 如果一个二进制数包含连续的两个1,我们就称这个二进制数是非法的。小Hi想知道在所有 n 位二进制数(一共有2n个)中,非法二进制数有多少个。例如对于 n = 3,有 011, 110, 111 三个非法二进制数。由于结果可能很大,你只需要输出模109+7的余数。输入 一个整数 n (1 ≤ n ≤ 100原创 2017-01-04 21:34:41 · 755 阅读 · 0 评论 -
[hihocoder taige 20-3]最小字典序子序列
问题描述题目3 : Smallest Substring 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given a string S and an integer K, your task is to find the lexicographically smallest string T which satisfies: T is a subseq原创 2016-12-28 20:49:25 · 659 阅读 · 0 评论 -
[hihocoder 1070]RMQ问题再临
问题描述时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述终于,小Hi和小Ho踏上了回国的旅程。在飞机上,望着采购来的特产——小Hi陷入了沉思:还记得在上上周他们去超市的时候,前前后后挑了那么多的东西,都幸运的没有任何其他人(售货员/其他顾客)来打搅他们的采购过程。但是如果发生了这样的事情,他们的采购又会变得如何呢?于是小Hi便向小Ho提出了这个问题:假设整个货架上从原创 2016-12-29 20:03:51 · 274 阅读 · 0 评论 -
[hihocoder1490]Tree Restoration恢复树
问题描述题目2 : Tree Restoration 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 There is a tree of N nodes which are numbered from 1 to N. Unfortunately, its edges are missing so we don’t know how the nodes are原创 2017-04-18 22:14:03 · 633 阅读 · 0 评论 -
[hihocoder1322] 树结构判定
这是hiho一下 第161周的题目题目描述时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个包含 N 个顶点 M 条边的无向图 G ,判断 G 是不是一棵树。输入 第一个是一个整数 T ,代表测试数据的组数。 (1 ≤ T ≤ 10)每组测试数据第一行包含两个整数 N 和 M 。(2 ≤ N ≤ 500, 1 ≤ M ≤ 100000)以下 M 行每行包原创 2017-08-16 12:59:12 · 343 阅读 · 0 评论 -
[hihocoder1323]回文字符串
这是一道hiho一下 第162周的笔试题。题目描述时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个字符串 S ,最少需要几次增删改操作可以把 S 变成一个回文字符串?一次操作可以在任意位置插入一个字符,或者删除任意一个字符,或者把任意一个字符修改成任意其他字符。输入 字符串 S。S 的长度不超过100, 只包含’A’-‘Z’。输出 最少的修改次数。样原创 2017-08-10 17:04:04 · 828 阅读 · 0 评论 -
[hihocoder1546]集合计数
题目描述时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个包含N个整数的集合S={A1, A2, … AN},以及一个给定的整数K,请计算有多少个S的子集满足其中的最大值与最小值的和小于等于K。例如对于S={4, 2, 5, 8}以及K=7,满足的条件的子集有以下4个:{2}, {2, 4}, {2, 5}, {2, 4, 5}。输入 第一行包含两个整数原创 2017-08-11 21:12:53 · 763 阅读 · 0 评论 -
[hihocoder1055]刷油漆
问题描述给树中每个节点赋予一个value,求包含指定节点的最多还有M个节点的一个联通的最大值。具体参考hihocoder官网。算法详解1. 算法框架子问题为求以该节点为根节点的子树中最多含有0-m个节点能够得到的最大值,递归实现的算法,每个节点内部利用动态规划求解。递归基:如果没有子节点,那么max_value[0] = 0; max_value[1] = Node.val原创 2016-12-15 20:36:59 · 376 阅读 · 0 评论 -
[hihocoder1049]后序遍历
问题描述由树的前序、中序得到后序。具体参考hihocoder官网。算法简介1. 由前序、中序重构树因为数据很小,所以不需要考虑复杂度。作者采用了递归算法,利用前序找到根节点,然后利用中序切分左右子树,然后左右子树再递归构建。递归算法需要注意构造递归基。2. 生成树的后序遍历递归算法很简单,先左子树后序遍历,再右子树后序遍历,最后加上根节点即可。全部代码#includ原创 2016-12-13 21:12:20 · 314 阅读 · 0 评论 -
[hihocoder1032]最长回文子串
这里只是对于“最长回文子串”算法的简单定义与实现代码,具体请参照hihocoder的官网。问题描述回文串的定义是正读与反读相同;子串的定义是任意连续字符串;求给定字符串的最长回文子串的长度。详情请参照hihocoder的官网,上面也有详细的算法介绍。实现思路1. 最简单的方法从最长长度递减,检查所有的子串判断是否是回文子串,最差时间复杂度是O(n^2)。2. 枚举字原创 2016-11-30 22:21:35 · 425 阅读 · 0 评论 -
[hihocoder1039]字符消除
问题简介具体参照hihocoder网站。实现思路因为字符串长度最大为100,只有ABC三个字符,所以只有300种情况,每种情况最差处理是O(100^2)。所以即便最差情况也只有3e6的计算次数,不足10ms。因此只需要实现穷举算法即可,先插入字符,然后判断会消除多少字符。代码1. 消除字符的函数输入字符串,返回消除字符的数目,同时字符串改变为消除之后的字符串。例如str原创 2016-12-02 15:12:13 · 714 阅读 · 0 评论 -
[hihocoder1050]树中的最长路
问题简介寻找树中的最长路,详情请参考hihocoder官网。算法详解使用递归算法实现,首先设定一个全局根节点(这里使用编号为1的节点),然后任意节点计算以该节点为根节点的子树中的最长路径以及深度。使用longest_path(int <,int &ld)实现上诉功能,lt用于返回最长路径,ld返回深度。对于任意节点,该节点的最长路径为子节点的最长路径的最大值,在与所有子节点中深原创 2016-12-14 21:12:12 · 358 阅读 · 0 评论 -
[hihocoder1015]补提交卡
问题简介具体参照hihocoder官网。实现思路最长连续提交天数等价于相邻未提交日期差值的最大值-1,所以原问题是求解去除哪些日期之后可以使得相邻日期的差值最大。那么消除的日期必定是相邻的日期,否则可以通过改变某个不相邻日期为相邻日期使得差值增大。处理的时候前后加入虚拟日期第0日以及第101日,方便边界的处理。代码#include using namespace std原创 2016-12-03 18:23:04 · 339 阅读 · 0 评论 -
[hihocoder1036]Trie图
问题简介给定词典,求给定文章内部是否含有词典中的单词。具体问题请参考hihocoder的网站。算法思路详细的算法思路参照hihocoder的网站。Trie树大致上是共前缀的树(具体参照[hihocoder1014]Trie树),Trie图则是维护后缀前缀重叠最长的信息(这里结合了KMP的思想,KMP可以看做是词典只有一个词的Trie树;KMP也是维护字符串前缀后缀最长重叠部分,原创 2016-12-03 22:46:38 · 318 阅读 · 0 评论 -
[hihocoder1037]数字三角形
问题简介具体问题请参考hihocoder的网站。算法思想此问题可以看做给定一个无环图,求路径上节点值之后最大的路径,是一个经典的动态规划问题。方程可以看做f[i][j] = value[i][j]+max(f[i+1][j],f[i+1][j+1]),由最底层到最高层枚举即可。代码#include using namespace std;int ma原创 2016-12-05 16:28:15 · 539 阅读 · 0 评论 -
[hihocoder1038]01背包问题
问题简介具体问题请参考hihocoder的网站。算法思想这就是一个01-背包问题,非常典型的动态规划求解问题。按照物体逐一枚举,转换方程为max_value[money] = max(max_value[money] , max_value[money-need[物体]]+value[物体]),即在此之前所有物体中使用Money可以求得的最大value等于不采用最大值以及采用最原创 2016-12-05 17:32:09 · 617 阅读 · 0 评论 -
[hihocoder1044]状态压缩一
问题简介详情请参考hihocoder官网。从N个数字选取任意个数字使得数字和最大,需要满足连续M个数字中不选择超过Q个。算法详解这个问题可以利用动态规划求解,需要按数字枚举,且对于前M个是否选取的状态展开。时间复杂度为O(N*2^M),因为M不大于10,所以O(2^M)=O(1024)=O(1)。具体的对于第i个数字,存储i-M+1到i这M个数字的2^M种选取情况下,从前i个数字中原创 2016-12-06 20:46:03 · 410 阅读 · 0 评论 -
[hihocoder1048]状态压缩2
问题描述具体介绍请参考hihocoder的官网。算法&部分代码这里标记中使用的上下左右指的是同一蛋糕的另外一个格子相对于本格子的位置,例如左上角的格子只可能有DOWN和RIGHT两个方向。1. 深搜+剪枝从上到下,从左到右,枚举格子的状态,深搜到底则+1。剪枝是基于祖先节点的情况不存在,则本节点的情况也不存在。深搜是利用迭代算法实现的。简单证明可以得到O(4^n^m)的复杂原创 2016-12-13 17:06:29 · 281 阅读 · 0 评论 -
[hihocoder1324]希尔伯特曲线
这是hiho一下 第163周的题目。题目描述时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 希尔伯特曲线是以下一系列分形曲线 Hn 的极限。我们可以把 Hn 看作一条覆盖 2n × 2n 方格矩阵的曲线,曲线上一共有 2n × 2n 个顶点(包括左下角起点和右下角终点),恰好覆盖每个方格一次。Hn(n > 1)可以通过如下方法构造:将 Hn-1 顺时针旋转90原创 2017-08-15 13:40:10 · 1173 阅读 · 2 评论