数据结构
文章平均质量分 83
zhaofukai
行有不得,反求诸己
展开
-
[线段树]HDU 4052 Adding New Machine
测试数据1的图示这道题目不会。看别人说用线段树来做,就想如何用二维去统计每行可以放的格子数,但始终没想出来。后来统计不能放的格子数,但对于那些格子不能放,却一直搞不明白,后来终于知道了,感觉也不难想,只是自己思维一直被解题报告套牢了,不能自己去思考了。如何转化成矩形面积并来做?分成横向和纵向。横向:每个old machin左边m-1个格子不能放,最右边m-1个格子也不能放,把这原创 2012-08-21 11:33:34 · 1009 阅读 · 0 评论 -
hdu 3183 A Magic Lamp
今天下午比赛做了个二维的rmq,忽然发现自己对rmq的理解那么的不深。然后找个rmq专题做,选了这个题,可是看了半天也不知道怎么用rmq解,然后贪心乱搞,最后过了,感觉这样也是个不错的办法。这样贪心:从左往右遍历数字,用一个栈存已经的得到的数,若当前的数A小于栈顶元素,则出栈,否则入栈,目的就是得到一个上升的序列。#include #include using namespace st原创 2012-07-28 23:14:53 · 557 阅读 · 0 评论 -
hdu 4213 Bob’s Race
首先我们先求出每个点到叶节点的最大距离。从编号为1的节点开始,存在一个数组中。 然后在用rmq预处理这个数组的最大值和最小值最后二分查找答案。现在我们讨论如何解决这3步第一步:树形dp,需要两次遍历。第一次遍历,任取一个节点为根节点u,树的层次就确定了。可以递归求出每个点到其子孙的最远距离。每个节点记录两个最值,最大值和次大值,并记录这两个值来自哪个节点。注意:这两个值来自不同的子原创 2012-08-08 13:06:22 · 971 阅读 · 0 评论 -
ZOJ 3614 Choir
东西学的多了不一定好,因为理解的不够深入,所以会乱用。比如这道题目。。。。学了线段树后知道线段树也可以求第k大值,结果TLE。。。学了树状数组后知道树状数组也可以求第k大值,结果又TLE。。。实在优化不过去了,看看被人怎么写的?RMQ啊!求区间内的最值用RMQ,O(1)的查询,怎么把这个忘了。。。越学就越不知道用哪个好了。。。还要加深理解。。。#include #原创 2012-08-08 09:57:42 · 609 阅读 · 0 评论 -
hdu 3648 Median Filter
我们按“S”型枚举每一个点,如左图:即右->下->左->下->右....用一个集合存储当前子正方形内的数,下一次查找时,插入新的一列,删除旧的列。如右图:当前枚举点150(三角标记),黑色正方形的值保存一个集合中,求出中位数。当枚举的点有150移动到125时,我们把蓝色椭圆内的点插入,把黄色椭圆内的点删掉,此时集合中的元素即为红色正方形内的元素,可求出新的中位数。不断如此操作,直到结束。首原创 2012-08-07 23:18:39 · 1560 阅读 · 3 评论 -
RMQ的问题
最近看了rmq,先学的的st算法,实际就是用动态规划来解的。设状态d[i][j]表示从第i个位置起,2^j个数的最大值。状态转移方程:d[i][j] = max(d[i][j - 1], d[i + (1 题目:POJ 3264,可以完全套上面的方程POJ 3369,预处理的时候加一个处理两个端点的条件,查询也加上上面的都是一维的情况,也可以处理二维的情况。题目:POJ 201原创 2012-05-28 11:58:14 · 426 阅读 · 0 评论 -
Contact
<br />这道题用trie树来做。我做的真是太悲剧了,在建树的时候,上界我用的strlen(ss),结果光建树就花了8秒。刚开始我以为是因为指针建树花时间太多,全改成数组后,还是一样,我才改的strlen(ss),结果速度一下子就提上来了,真是无语……<br /> 注意输出格式,每行最多输出6个。<br />程序代码:<br />/*ID:zhaofuk1PROG: contactLANG: C++*/#include <iostream>#include <cstring>#原创 2011-04-21 16:57:00 · 1224 阅读 · 0 评论 -
POJ 3764 The xor-longest Path
<br /> 这道题做得就是一个悲剧。做这道题需要的能力我是达不到的,但感觉有思路,还是做了,当提交的结果不断是是RT、WS、TLE时,盲目的修改,换来的更多是错误,缺乏对这道题整体的理解,有错误时也不知哪儿错了。<br /> 这道题要求最长的异或路径:就是在树中找两个节点,两个节点间有唯一路径(因为是树),把路径不断做异或,异或完后求最大的。数据是10万,O(n2)算法超时。我们知道异或有这样的性质:a^b = (a^c)^(b^c),这样就可以考虑找出a与b公共的c,实际上就是求出从原创 2011-03-12 10:12:00 · 1589 阅读 · 1 评论 -
POJ 1816 Wild Words
<br /> 这道题用字典树来做。首先将给的模式串建一颗字典树,每个节点包含28个孩子指针,节点是那些模式串的结尾,为了方便,还包括它的父母的指针这些信息;然后再对读入的串进行配对,判断这个串的字符是否在树中或树中有'?'或'*',都进行递归;注意为'*'时,串从这个位置往后都要在此位置进行递归。<br /> 这个题目比较棘手的地方:一是每个节点的信息;二是树中出现'*'号该如何递归。<br />程序代码:<br />#include<iostream>#include<cstdio原创 2011-03-10 23:07:00 · 827 阅读 · 0 评论 -
[线段树]POJ 2374 Fence Obstacle Course
这道题目先抛开时间效率来分析。我们可以开一个一维数组w[],数组下标就是区间的端点值,cow刚开始在w[s]处。碰到一个区间后,我们看这个区间会覆盖多少个值(实际就是到前面区间的端点所花的步数),枚举这些值更新当前区间两个端点值,枚举完后,把覆盖的值删掉,添加这两个新的端点值,区间外的值不用考虑。最后在从小到大枚举这些端点值加上距离原点的距离即为答案,当然要从这些值中选择最小的。这其中涉及原创 2012-09-05 00:48:33 · 1528 阅读 · 1 评论