- 博客(22)
- 资源 (12)
- 收藏
- 关注
原创 [HDU 5489]Removed Interval[LIS]
题目链接:[HDU 5489]Removed Interval[LIS]题意分析:求含有N个元素的数组,去掉L个连续的元素后,剩下元素构成的最长上升子序列的长度。解题思路:我们就可以枚举这个长度为L的区间,从左往右滑动窗口。每向右移动一格,此时有:最长上升子序列长度 = 窗口右边以右边第一个元素开头的最长上升子序列 + 窗口左边最大元素小于窗口右边第一个元素的最长上升子序列。
2015-09-28 22:39:28 2469 6
原创 [POJ 3436]ACM Computer Factory[最大流][打印路径]
题目链接:[POJ 3436]ACM Computer Factory[最大流][打印路径] 题意分析: 组装一台电脑需要P个部件,现在有N个生产线,每个生产线分三部分的描述:第一个数字代表,这台机器单位时间能接收多少部件,后面的前p个部分代表该生产线需要什么部件,0代表不需要,1代表需要,2代表可有可无(相当于不需要),后p个部分代表产生什么部件,0不产生,1产生。问,怎么样调动这些材料,让整
2015-09-26 10:51:53 1443
原创 [POJ 2777]Count Color[线段树区间更新查询]
题目链接:[POJ 2777]Count Color[线段树区间更新查询] 题意分析: 给出一个长为L的长板,划分成L个单元,每个单元初始时颜色为1。先给出O个操作,包含更改区间l,r为颜色c和查询区间l,r中有多少种不同的颜色。颜色数不超过30个。 解题思路: 题目需要查询的是区间中有多少种不同的颜色,而颜色数又不超过30个,我们可以用二进制来表示一个区间中拥有的颜色,更新的时候等于两个子
2015-09-25 13:49:42 671
原创 [HDU 1394]Minimum Inversion Number[逆序对][线段树]
题目链接:[HDU 1394]Minimum Inversion Number[逆序对][线段树]题意分析:实质上来说,这道题就是求n个小于n的数的排列变成环之后,从其中某一点切开的最小逆序对数。解题思路:第一步:求出初始逆序对数。可以用归并排序,这里我用了线段树。能使用线段树的理由:线段树存储的是一个区间段的值,应用到求逆序对数,我们就可以让它初始时都为0,每次加入一个数x前
2015-09-24 01:18:55 730
原创 [算法导论 第2章]归并排序
主要思路:对数组不断地从中间进行切分,直到不可分割。然后将每个递归段内的两个数组,每次比较他们最顶端的元素,将其中小的元素合并到数组中。这里设置两个哨兵元素,值为INF。作为底部,这样就不用担心某个数组比较完后为空的情况,然后当运行了一定的次数(也就是合并了该递归段内元素个数)时,就停止整个过程。具体代码如下:#includeusing namespace std;const
2015-09-23 18:54:17 757
原创 [HDU 1698]Just a Hook[线段树区间更新]
题目链接:[HDU 1698]Just a Hook[线段树区间更新]题意分析:屠夫的钩子被分割成n个节,每节初始时都有铜制,铜制每节价值为1.然后给出q个操作,改变段l,r的材料为其它材料。最终询问:此时钩子的总价值是多少?解题思路:线段树的区间更新。使用到了lazy思想,也就是代码中的add数组。整个原理就是,更新的时候,当某段被包含在被更新区间内时,只需给该段标记一下改变
2015-09-22 17:05:10 603
原创 [HDU 4031]Attack[树状数组区间更新单点查询]
题目链接:[HDU 4031]Attack[树状数组区间更新单点查询]题意分析:『基地』组织又要打美国啦,如今他使用一种武器,可以攻打一个范围内的目标。但是米国有护盾,每个连续段内都有护盾,可以抵挡一次攻击。但是护盾有CD,一次之后要过t时间才能回复,然而恐怖分子的没有CD,果然反派都是流弊XD。给出多个攻击和查询,每次查询输出该点被成功攻击了几次。解题思路:成功攻击次数怎么计
2015-09-17 18:06:17 599
原创 [CodeForces 579C]A Problem about Polyline[数学]
题目链接:[CodeForces 579C]A Problem about Polyline[数学]题意分析:给出一条过点(0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – ....的折线,再给出点(a,b),问经过点(a,b)的折线中,x最小是多少?如果没有折线经过(a, b)
2015-09-17 14:28:14 1041
原创 [POJ 3468]A Simple Problem with Integers[树状数组区间更新+求和]
题目链接:[POJ 3468]A Simple Problem with Integers[树状数组区间更新+求和]题意分析:对特定的连续区间进行更新值并求出特定区间的和。解题思路:使用树状数组进行区间更新,最主要的思想就是将区间的改变量保存下来。详细解答戳这里:http://kenby.iteye.com/blog/962159说一说对最终 ans[x] = segma(
2015-09-16 19:33:59 503
原创 [POJ 3264]Balanced Lineup[树状数组查询区间最大最小值]
题目链接:[POJ 3264]Balanced Lineup[树状数组查询区间最大最小值]题意分析:查询每个区间的最大值与最小值只差。解题思路:用树状数组查询。具体见博文:[HDU 1754]I Hate It[树状数组查询+更新区间最大值]只是多了个查询最小值。没啥区别。个人感受:对最大值最小值的查询还是没掌握牢固,多瞅瞅。具体代码如下:#include#i
2015-09-15 23:38:13 2407
原创 [HDU 1754]I Hate It[树状数组查询+更新区间最大值]
题目链接:[HDU 1754]I Hate It[树状数组查询+更新区间最大值]题意分析:查询区间最大值+更新区间最大值。解题思路:自己做主把代码改得自己好理解点了XD具体见代码注释个人感受:嘛,一步步来,先啃了树状数组先。具体代码如下:#include#includeusing namespace std;const int MAXN = 2e5 + 11
2015-09-15 17:22:14 1780
原创 [HDU 1166]敌兵布阵[树状数组][入门]
题目链接:[HDU 1166]敌兵布阵[树状数组][入门]题意分析:查询区间敌兵数。解题思路:模板题啦,可以用各种方法过。这里当做树状数组入门。推荐一篇博文来入门:http://blog.csdn.net/pi9nc/article/details/8779483#t1 博文的第二部分就是关于树状数组的。个人感受:整个树状数组我觉得最需要抓住的是sum数组是存储着什
2015-09-14 23:56:48 599
原创 [CodeForces 577B]Modulo Sum[实现][数学]
题目链接:[CodeForces 577B]Modulo Sum[实现][数学]题意分析:给出n个数,再给出一个数m。问给出的n个数中,任意组合,是否存在组合出来和能被m整除。解题思路:进一步说:题目就是问:在所有这些数能得到的组合中,是否存在和使得其被m整除。显然,这些组合出来的和取余后不大于m,这里面存在着大量重复。所以我们可以用一个数组标记这个和是否出现过,如果没出现就放入v
2015-09-11 23:29:15 2114
原创 [POJ 1733]Parity game[并查集]
题目链接:[POJ 1733]Parity game[并查集]题意分析:给出描述:区间l到r中1的个数是奇数个还是偶数个。输出从哪一条开始,下一条错误了。如果整个描述下来都是对的,那么就输出有多少条描述。解题思路:******高能预警*******如果看不懂这题,请去做这题:[HDU 3038]How Many Answers Are Wrong题解:http://blog
2015-09-11 18:06:17 1015
原创 [HDU 3038]How Many Answers Are Wrong[并查集]
题目链接:[HDU 3038]How Many Answers Are Wrong[并查集]题意分析:给出区间值的和,问这些话中有多少个是和之前矛盾的。解题思路:用一个dis数组记录点到根节点的距离(也就是从该节点到根节点的整个区间和),那么当所给出的区间两点的根节点相同时,就可以进行判断。例如这两个区间端点是l和r。那么整个区间的总和就是dis[l] - dis[r]。由于区间l
2015-09-11 17:25:13 895
原创 并查集小结
小做了一下并查集相关的题目。就从最基础的开始吧。 首先是并查集的介绍,非常好的一篇博文:http://blog.csdn.net/dellaserss/article/details/7724401 其次就是一些习题了。 首先是这道题目:[POJ1308]Is It A Tree? 整道题就是需要你判断给出一个有向图是不是一棵树。这
2015-09-10 17:20:51 970 2
原创 [POJ 1456]Supermarket[贪心][优先队列or并查集优化]
题目链接:[POJ 1456]Supermarket[贪心][优先队列or并查集优化]题意分析:给出若干个商品,每个都有自己的销售截至日期,每天只能销售一个,每销售一个都能得到钱,问:最多能挣到多少钱?解题思路:这里可以使用贪心的思路。从末尾往前面数日期,如果当天有商品截止,就把这些商品全都放入优先队列,然后卖出价值最大的那一个;如果当天没有商品截止,就去卖优先队列里价值最大的那个
2015-09-08 23:55:51 673
原创 [POJ 1988]Cube Stacking[带权并查集]
题目链接:[POJ 1988]Cube Stacking[带权并查集]题意分析:FJ和B在拿一些方块堆玩游戏。初始时总共有3e4个方块堆,每个堆上一个方块。现在有两种操作。操作M将含有x的方块堆,移到含有y的方块堆上。操作C将统计方块x的下方有多少个方块。解题思路:设置三个数组,一个是方块所在的堆块的数组p[i],还有一个是方块到其父亲节点距离的dis[]数组,最后一个是方块所在堆
2015-09-08 19:22:47 692
原创 [POJ 1182]食物链[并查集]
题目链接:[POJ 1182]食物链[并查集]题意分析:动物间可能存在一种食物链x吃y,y吃z,z吃x。下面给出一些语句,判断有多少句是假话。解题思路:设置三个并查集,分别代表物种,同一并查集中的动物种类相同。不同种类间的合并代表着捕食关系。例如 x, y。因为x可以为任意一个种类中的动物,所以在合并它们捕食关系时,我们要把所有的可能情况都合并起来。什么时候说谎话呢?1
2015-09-08 17:08:07 505
原创 [CodeForces 490B]Queue[实现]
题目链接:[CodeForces 490B]Queue[实现]题意分析:给出队伍中各个同学的前面和后面是谁,输出整个队伍。解题思路:因为记录的是前面和后面的同学,所以奇数号同学记录的是偶数号同学的位置,同理,偶数号同学记录的也是如此。可以发现,2号同学是被1号同学记录,1号同学的前驱同学为0,也就是不存在,所以给出一系列信息,我们总能依据0号(那个不存在的同学)把所有偶数号同学
2015-09-08 12:21:43 610
原创 [POJ 2492]A Bug's Life[并查集]
题目链接:[POJ 2492]A Bug's Life[并查集]题意分析:给出n个虫子,和m个虫子间的关系a,b,代表a喜欢b。问:在给出的关系中,是否存在同性恋的虫子呢?解题思路:和基础的并查集不同,这里判断a、b间的关系需要利用到之前已有的信息判断。这里我们设置a-b+n代表a虫和b虫是不同的性别,如果存在a-b是属于相同的集合,那么就是同性恋存在。因为根据我们所设的集合,a如
2015-09-07 21:12:54 484
数据结构与算法分析(C++版)(第三版)第五章个别习题答案
2015-10-16
数据结构与算法分析(C++版)(第三版)第四章个别习题
2015-09-25
数字识别系统预处理类
2015-09-22
数据结构与算法分析(C++版)(第三版)第三章个别习题答案
2015-09-22
The C Programming Language 2nd Edition(英文原版,包含答案)
2014-10-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人