数据结构
文章平均质量分 76
kdqzzxxcc
这个作者很懒,什么都没留下…
展开
-
HDU 4763 拓展KMP
题意:给你一个串,问是否可以找到这样的三个串,是这个串的前缀,中间串, 后缀, 这个三个串相同,找出最长的这样的三个串。输出长度。吐槽:昨天随手KMP就水过了,发现随便一组样例都过不了,数据真水。思路:今天用拓展KMP做了一发,首先我们知道拓展KMP里面的EX数组。假设EX[i] = x 。(相对于这题,模式串和匹配串是一样的)那么代表从位置i 起 共 x 个字符组成的子串, 和从首位原创 2013-09-29 19:43:21 · 1087 阅读 · 0 评论 -
HDU 2825 AC自动机+DP
题意:一个密码,长度为 n,然后有m个magic words,这个密码至少由k个magic words组成。问这个密码可能出现的总数。思路:首先构造AC自动机,由于m很小,才10 ,我们可以使用二进制来表示每个magic words的使用情况。对于dp[i][j][k],表示长度为i 时,匹配到j这个节点,当前选取的magic words是k 状态时的最大数量。#include原创 2013-08-27 16:13:35 · 706 阅读 · 0 评论 -
HDU 2896 AC自动机
中文题,题意就不解释了。这道题把我坑了下,应该是做题不仔细的原因,一开始我以为是26个字母的(没认真读题,看样例的结果) ,然后RE了好几发,最多发现题目里的描述是ASCLL码表里面的可见字符,然后将建字典树过程中的0 - 25的循环改成0 - 127 就过了。讲一下思路,这道题就是AC自动机的模版题,唯一需要注意的就是加一个id的域来存这个字符串的序号,最后输出的时候要按从小到大的顺序,原创 2013-07-23 02:30:25 · 960 阅读 · 1 评论 -
HDU 4691(多校第九场1006) 后缀数组
。。。还能多说什么。眼角一滴翔滑过。一直以为题意是当前串与所有之前输入的串的LCP。。。然后就T了一整场。扫了一眼标程突然发现他只比较输入的串和上一个串?我心中突然有千万匹草泥马踏过。然后随手就A了。。。先RMQ预处理一下,复杂度为nlogn ,然后每次LCP询问只需O(1)的复杂度。#include #include #include #include #in原创 2013-08-20 18:00:46 · 1892 阅读 · 3 评论 -
POJ 3264 RMQ模版
写RMQ练练手。这道题差一点刷进第一版,明天再优化一下。#include #include #include #include #include #include #include #include #include #include #include #include #define Max 2505#define FI first#define SE sec原创 2013-08-20 22:27:06 · 867 阅读 · 0 评论 -
HDU 4009 不定根最小树形图
讲一下建图过程,首先建立一个超级源点S,对于这个源点,向每个HOUSE连一条有向边,权值为该HOUSE建立WELL的费用,即高度*X。然后每个可以连边的WELL之间,费用为曼哈顿距离*Y,然后考虑两边的高度,如果需要链接PUMB,则在该费用上+Z。这样建图之后,以S为根,跑一遍最小树形图算法即可。CODE:#include #include #include #include原创 2013-08-19 17:06:45 · 803 阅读 · 0 评论 -
后缀数组练习题(转)
原文:http://hi.baidu.com/lewutian/blog/item/4d098138d29c34f9b311c725.html接下来逐步A掉里面的题。后缀数组经典思想:多串合并+二分答案+最优性--->可行性例 1 :最长公共前缀给定一个字符串,询问某两个后缀的最长公共前缀。 // 直接套用,ans=min( height[ i ] )+rm原创 2013-07-31 21:24:50 · 1125 阅读 · 0 评论 -
HDU 2121 不定根最小树形图
题意:给你一张有向图,问是否能找出一个点,使得他到所有点的距离最小。思路:还是不定根最小树形图,虚拟一个S作为根,与所有点相连,然后跑一遍朱刘算法。至于找出这个点,我们将S与所有点都连起来的时候,是从小到大连的。所以这个边的编号是可以代表点的编号的。例如n = 4 , m = 3 .那么在原来3条边的基础上,第4条边就是S->0 ,同理第n条。所以在找点的时候我们可以只记录这个边的原创 2013-08-19 20:05:33 · 951 阅读 · 0 评论 -
POJ 3164 最小树形图
这题才是最小树形图的基础题,题意就不赘述了,敲这道题的时候发现一个很坑的情况。因为平时输入的时候用惯了输入优化,所以对于这些输入我一般都直接上输入优化的,但是这道题让我T了20次之后我才发现输入优化居然是T的原因,我改成scanf后就A掉了。比如下面那段代码的注释处,改成输入优化就T了。不解,求解答。#include #include #include #include #原创 2013-08-19 16:14:24 · 785 阅读 · 0 评论 -
POJ 2513 TRIE树&& 欧拉通路&&欧拉回路
题意:每次给你一根木棒,木棒收尾有两个单词,两根木棒单词一样的位置可以相连,问最后是否可以连成一根木棒。思路:一开始直接用MAP来HASH,然后就T了。后来发现其实每个单词最后10个字母,直接用TRIE来存每个单词查询的时候复杂度其实差不多也是O(1)的。还要注意要用并查集来判图是否连通。蛮综合的一道题。#include #include #include #includ原创 2013-07-29 15:13:47 · 1053 阅读 · 0 评论 -
HDU 3333 树状数组+离线处理
这道题和HDU3874完全一样。HDU3874解题报告当然只是数据加强了而已。唯一的区别就是每个值是10^9,所以要离散化,直接STL搞之,然后下面处理的过程就和3874完全一样了。注意中间值超int就可以了。最近这种题特别多,看来得多加强这方面的练习了。#include #include #include #include #include #include原创 2013-08-02 14:56:22 · 1011 阅读 · 0 评论 -
树状数组的学习小结
树状数组,又称二进制索引树,英文名Binary Indexed Tree。一、树状数组的用途主要用来求解数列的前缀和,a[0]+a[1]+...+a[n]。由此引申出三类比较常见问题:1、单点更新,区间求值。(HDU1166)2、区间更新,单点求值。(HDU1556)3、求逆序对。(HDU2838) 二、树状数组的表示1、公式转载 2013-07-26 13:00:55 · 680 阅读 · 0 评论 -
HDU 4638 多校第四场1007 离线询问,树状数组||线段树维护
这道题其实和前面机场出的树状数组和线段数题都差不多。目测现在出这种离线处理,树状数组维护的题好多啊。题意:给出一个序列,然后问,一个区间内,最多有多少人个GROUP,如果两个人能的id是连续的,那么他们就是一个GROUP的,这个GROUP可以有很多人。思路:其实跟前几场的题有点像,我们先将所有的数都插入,存在线段树里面,那么每次插入时候的值假设是在pos这位,那么我们插入的值其实是根据原创 2013-08-02 10:40:14 · 912 阅读 · 0 评论 -
POJ 1204 Trie树
题意:这道题还是蛮有意思的,首先,他给出一个n * m 的表格,里面都是大写字母,然后再给出k个串,问这个k个串在表格的什么位置,输出起始坐标和每个串在表格中的方向,一共8个方向。思路:一开始就想,对表格的八个方向都建一个AC自动机,然后拿k个串一个一个匹配,但是发现代码复杂度极高,非常不好实现。那可以从串的角度考虑,我们对这些串建一个TRIE树,那么每次枚举表格的起点,然后从这个起点出发原创 2013-08-30 19:05:01 · 1097 阅读 · 0 评论 -
POJ 3974 最长回文字串(manacher算法)
题意:给出一个字符串,求出最长回文字串。思路:一开始我直接上了后缀数组DC3的解法,然后MLE了。看了DISCUSS发现还有一种计算回文字串更加优越的算法,就是manacher算法。就去学习了一下,/************************以下转自http://funnyxj.blog.163.com/blog/static/20459016020127514231538/****原创 2013-09-06 14:43:21 · 1399 阅读 · 0 评论 -
POJ 1961 KMP_next数组
题意:给你一个串,然后叫你输出,该串从1 -> i (i = 2 , 3 , 4 ……, l)这个前缀串,可以由一个字串循环多少次产生,即是一个周期串,无法形成则不输出。具体可以看样例,很好理解。思路:这道题考察的是KMP,next数组的应用,我们知道如果next[j] = k ,那么代表(j - k ,……j - 1 )位的字符与长度为k的前缀匹配。那么如果一个串是周期串的话,那么每次错原创 2013-09-29 16:57:09 · 1719 阅读 · 0 评论 -
UVALIVE 5789 线段树
这道题其实不用线段树,因为他的数据里区间不会重合,所以直接爆搞就可以了。但是我一开始没注意,然后就直接上线段树了,就当是练手了。期间SB了很多次,学习了。题意:给出N个人和M次询问。N个人从1 - N 排成一列。每次询问一个区间[a , b] ,杀死这个区间的人,然后问a 的左边一个数,和b的右边一个数是多少,如果没有则输出*。我用线段树记录区间序号最大值和序号最小原创 2013-09-27 22:34:29 · 1006 阅读 · 0 评论 -
UVALIVE 5792 Trie+统计
题意:给你两种串,一种可以当前缀,一种可以当后缀,问两种串合起来,一共有多少种组合。并且没有重合。思路:我们先将两种串插入字典树,对于后缀串,我们反向插入,然后处理出每个字符对应的后缀的个数。我们来看一个组合的串,c = a + b 。这个c可能很多种组合,但是,只要我们取a最大,那么这样计数就是唯一的。所谓a最大就是当搜到a是该前缀的最后一个字母,那么a就是最大的。这是对应a是最后一原创 2013-09-27 21:58:50 · 850 阅读 · 0 评论 -
HDU 4325 离散化 + 线段树
题意:给出n个区间,【s,t】,区间,代表这个时间段有一朵花。m个询问,每次询问一个时间点,输出该时间的花的数量。思路:n 直接离散化之后然后线段树成段更新,输出点的值即可。#include #include #include #include #include #include #include #include #include #include #原创 2013-06-02 22:54:37 · 1065 阅读 · 0 评论 -
POJ 2823 线段树,RMQ
题意:给你n个数字,和一个长度m,输出所有长度为m的区间的最大值和最小值。思路:直接线段树区间求最值就可以了。或者可以用RMQ。或者STL也可以。贴个线段树吧。#include #include #include #include #include #include #include #include #include #include #include原创 2013-10-04 00:29:10 · 1334 阅读 · 0 评论 -
POJ 3928 树状数组
这道题是08年北京现场赛的题。讲一下题意,N个人,从中选出3个人,使得,这三个人必须是从大到小或者从小到大,并且是严格的大小关系,即不可相等。问有多少种这样的组合。这道题的结论很好得出,假设一个人位于i,那么我们只需求出求1 -> (i - 1)位置小于这个人的个数,记为x ,当然大于这个人的个数也就出来了,记为x',同理, 求出(i + 1) -> n位置小于这个人的个数,记为y ,那么原创 2013-09-13 22:03:13 · 1311 阅读 · 3 评论 -
POJ 2029 二维树状数组(400题纪念)
一道二维树状数组的基础题。还有好多做法。数据量小都可以A。贴这题主要是纪念一下POJ 400AC达成~继续努力!~~~#include #include #include #include #include #include #include #include #include #include #include #include #define Max原创 2013-09-11 19:54:29 · 784 阅读 · 0 评论 -
UVAlive 6199 不定根最小树形图
首先是最小树形图的介绍。看这个博客。最小树形图上面介绍的很详细了,我就讲一下这道题的题意。首先给出一些二维点坐标,这些坐标之间构成一些有向图,根据题意,假设两个点a(x1 ,y1) ,b(x2 ,y2) .当y1 b。就是每个点只能连y坐标大于他的点,然后就构成了一张有向图。最后求出最少的距离可以使得所有的点都连起来。刚开始以为直接求出两两之间的距离,然后用kruskal原创 2013-08-19 15:09:38 · 850 阅读 · 0 评论 -
POJ 3264 Balanced Lineup 线段树基础
题意:给出N个数M个询问,每个询问一个区间(a,b)。输出区间内最大值最小值的差值。思路:线段树,也可以DP。#include #include #include #include #include #include #include #include #include #include #include #include #define PI acos(-原创 2012-08-14 21:10:22 · 590 阅读 · 0 评论 -
HDU 3584 三维树状数组
三维树状数组模版。优化不动了。#include #include #include #include #include #include #include #include #include #include #include #include #define Max 2505#define FI first#define SE second#define ll原创 2013-09-06 17:09:15 · 835 阅读 · 0 评论 -
Trie 集合
题意:给你一堆字符串,然后按字典序输出,再输出他们出现的频率。思路:trie。#include #include #include #include #include #include #include #include #include #include #include #include #define Max 2505#define FI first#de原创 2013-08-30 19:36:19 · 975 阅读 · 0 评论 -
HDU 4614 (13年多校第二场1004)裸线段树
题意:给你N个花瓶,编号是0 到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花。然后有2个操作。操作1,a b c ,往在a位置后面(包括a)插b朵花,输出插入的首位置和末位置。操作2,a b ,输出区间[a , b ]范围内的花的数量,然后全部清空。很显然这是一道线段数。区间更新,区间求和,这些基本的操作线段数都可以logN的时间范围内完成。操作2,很显然原创 2013-07-25 21:59:21 · 1267 阅读 · 1 评论 -
POJ 2777 线段树水题
题意:给你一个长度为N的线段数,一开始每个树的颜色都是1,然后有2个操作。第一个操作,将区间[a , b ]的颜色换成c。第二个操作,输出区间[a , b ]不同颜色的总数。直接线段树搞之。不过输入有个坑,a 可能大于b ,所以要判断一下。#include #include #include #include #include #include #include原创 2013-07-19 11:48:18 · 996 阅读 · 0 评论 -
字符串 KMP Trie AC自动机 后缀数组
还在看后缀数组,罗穗骞神牛的课件真是非常给力。今天做了场字符串的练习,包括KMP,Trie,AC自动机和后缀数组。A. Oulipo貌似是POJ的,以前做过。直接用KMP水过了 。B. 统计难题是HDU的吧,题意就是求一些串是另一些串前缀的个数,直接用Trie搞。struct trie{ int count ; struct trie *next[原创 2013-07-22 17:09:39 · 1066 阅读 · 0 评论 -
POJ 2761 SBT(size balanced tree)
题意:给出n个数字m个询问,每次询问在范围[a,b]内第k小数字是多少,并输出。思路:网上的最优解法是划分树或者归并树,最近学了SBT(size balanced tree),正好里面有类似的select(t,k)选择第k小数的操作,所以就用SBT写了一下。#include #include #include #include #include #include #incl原创 2013-03-19 23:38:08 · 1178 阅读 · 0 评论 -
POJ 2481 树状数组
// poj 2481 树状数组.cpp : 定义控制台应用程序的入口点。//题目要得到满足Si = Ej and Ei-Si > Ej-Sj (Si!=Sj && Ei!=Ej) 的个数//解法1:若按Ei值升序排序后,则相当于求每个位置i左边小于等于S[i]的个数.解法2:按Si值做降序排序后,相当于求每个位置i左边大于等于E[i]的个数树状数组更新节点的路径和求和的路径要改变,getSum转载 2012-08-01 18:09:53 · 594 阅读 · 0 评论 -
HDU 1166 树状数组 基础题
/*中文题,很好理解。http://acm.hdu.edu.cn/showproblem.php?pid=1166贴个链接比较纠结的是TLE了好几次。。原因居然是。。。。。*/#include #include #include #include #include #include #include #include #include #include #include #原创 2012-08-01 15:30:46 · 1479 阅读 · 0 评论 -
POJ 3481 SBT基础题
题意:1表示插入客户K,他的优先级是P(相当于大小),2表示输出当前优先级最高的客户(即找出最大值),并且删除。3同理输出最低级的。思路:运用SBT里面的get_min(),get_max()操作可以轻松完成。具体见代码#include #include #include #include #include #include #include #include #inc原创 2013-03-20 10:57:07 · 807 阅读 · 0 评论 -
hdu 2846 字典树
给出N个字符串,给出M个询问。问该串是多少个串的子串。字典树。。#include #include #include #include #include #include #include #include #include #include #include #include #define PI acos(-1.0)#define Max 2005#原创 2012-10-19 22:55:51 · 819 阅读 · 0 评论 -
POJ 2352 Stars 初学树状数组
题意:N个星星。给出N个坐标(x,y)。每个星星有一个等级,该星星的等级是x坐标和y坐标都不大于该星的星星数,求出不同等级星星的个数。思路:用树状数组,每加入一个点,判断(1,x)有多少个点,然后再updata。第一道树状数组,边A边看模板,太神了~~~#include #include #include #include #include #include #incl原创 2012-07-25 14:20:14 · 622 阅读 · 0 评论 -
POJ 2528 Mayor's posters 线段树(成段更新+离散化)
题意:给出N个海报,每个海报有一个长度区间(a,b).按顺序贴在墙上。问最后可以看到几张海报。思路:一想到的就是线段树,对每个区间进行染色,最后查找一共有多少种颜色。第一次写玩没看数据大小。MLE了。。仔细一看,海报长度1QW。然后写了个离散化的,300MS+。又去看了别人的离散化。。神多了。。60MS。。优化后的离散#include #include原创 2012-08-18 11:45:59 · 1730 阅读 · 3 评论 -
POJ 3368 Frequent values 线段树
题意:给你N个数,按照非减序列给出;然后M个询问,每个询问一个区间,问在(a,b)之间最多相同数量数字的个数。Sample Input10 3-1 -1 1 1 1 1 3 10 10 102 31 105 100Sample Output143思路:第一道线段树,以前只会树状数组,然后今天碰上这道题,就去学习了一下线段树。发现其实树状原创 2012-08-14 19:14:16 · 784 阅读 · 0 评论 -
POJ 2828 线段树
题意:给出一个N,接下来是N个数,每个数有一个插入的位置。输出最后的顺序。思路:一开始以为就是链表插入,然后看了下数据量。就没想法了。就用了线段树,建树和询问都是很基础的东西,就是最后处理位置有一些技巧。#include #include #include #include #include #include #include #include #inc原创 2012-08-17 15:28:14 · 726 阅读 · 0 评论 -
POJ 1823 Hotel 线段树
题意:一个Hotel有N个房间,一开始全部为空。接下来有M个询问。输入1,代表房间被占用,然后输入两个数代表房间被占用的房间号和数量。输入2,代表房间被置空,输入两个数代表房间被清空的房间号和数量。输入3,输出连续最长没有被占用的房间数量。思路:线段树。。。。。。。。写了好久,一开始更新节点各种WA,写不出来,参考了一段别人的代码,加上自己的理解,终于A了。最近原创 2012-08-16 16:14:33 · 951 阅读 · 0 评论 -
poj pku 线段树题目20道汇总+简要算法+分类+难度
这两天做了几个线段树的题目 与大家分享 欢迎补充难度系数 分为从1 到 5 (只对初学者有用 对大牛来讲 这些题的难度系数都是0..)http://acm.pku.edu.cn/JudgeOnline/problem?id=1151Atlantis 扫描线+离散化+线段树这是经典的扫描线求矩形面积交 很好过 没什么陷阱 如果头一次接触扫描线 那么难度系数大概算3吧转载 2012-08-16 15:52:34 · 2048 阅读 · 0 评论