数据结构
文章平均质量分 75
Airarts
是非审之于己,毁誉听之于人。
展开
-
[平衡树]牛耳杯程序设计大赛决赛D题——BallIntheBox
题目描述:Balls In The BoxTime limit: 1s Memory limit: 32768 kbProblem DescriptionThere are N boxes in Staginner’s house, and we mark them by 1,2,…,N. There are Ni(1The operations contain:1.原创 2012-03-27 11:55:44 · 924 阅读 · 0 评论 -
[KMP或者暴力]POJ 3450 Corporate Identity
传送门:http://poj.org/problem?id=3450题目大意:前面那道题类似,求多个字符串的最长且字典序最小的公共子串,还是枚举子串,然后拿去和剩余主串匹配,保存最优解。代码:#include#include#includeusing namespace std;const int MAXN = 222,MAXM = 4444;char s[MAXM][MAX原创 2012-06-24 14:10:53 · 814 阅读 · 0 评论 -
[KMP模板题]HDU-1711 Number Sequence
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1711题意:裸的模式匹配问题,N值较大,必须使用线性算法,考虑上KMP。关于KMP: 好久之前就看过KMP不过一直没搞懂,最近要搞下字符串,所以先拿它开刀,翻看了严蔚敏老师的数据结构,研究了许久,算是对KMP略知一二了吧,其KMP主算法还是比较好理解来的(不回溯主串匹配指针,当失配时,利用已经原创 2012-06-22 23:17:16 · 755 阅读 · 0 评论 -
[KMP或者暴力]POJ 3080 Blue Jeans
传送门:http://poj.org/problem?id=3080题目大意:给定M个字符串(2思路:枚举某一个字符串的所有子串,拿去和剩余的所有字符串匹配,保存长度最大且字典序最小的即可,无所谓用KMP,暴力就行了,算法的主要时间花在枚举子串上面,这里为了练习KMP还是写了个KMP的匹配.代码:#include#include#includeusing namesp原创 2012-06-23 21:58:54 · 1293 阅读 · 0 评论 -
[KMP求最小周期]POJ 2406 Power Strings
传送门:http://poj.org/problem?id=2406题意:给定一个字符串,让你求出他最多由几个相同的连续子串连接而成。思路:求出这个字符串的最小周期,然后用总长度/最小周期长度即是解。关于如何求最小周期:这里YY了一个方法,就是把该字符串增长一倍,然后拿原来的字符串做模式,增长后的字符串做主串,用KMP求模式在主串第1个位置(下标为0,包含第一个位置)之后的第一个匹配位原创 2012-06-23 13:01:58 · 743 阅读 · 0 评论 -
[KMP-求循环节]HDU 3746 Cyclic Nacklace
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3746题目大意:给定一个字符串,求出最少在末尾添加几个字符使得字符串成为循环串。解题思路:先求出最小循环节,如果最小循环节长度等于字符串长度,则添加的字符数为字符串的长度,否则用字符串的长度模循环节的长度,如果为0,说明已经是循环串,如果非0,说明还要添加字符串长度减去该值个字符.代码:#原创 2012-06-27 16:53:29 · 709 阅读 · 0 评论 -
[KMP-NEXT数组特性]HDU 3336 Count the string
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3336题目大意:给定一个字符串(1-200000),求出其所有前缀在自身中匹配成功的次数之和(模10007)解题思路:利用next数组的特性,next[pos]在主串指针在pos位置失配时,子串指针应该调整到next[pos]与pos进行比较,这意味着0-(next[pos]-1)的字符串应该和(原创 2012-06-27 11:39:32 · 590 阅读 · 0 评论 -
[KMP-循环节问题]HDU 1358 period
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1358题目大意:给定一个字符串,求出所有循环的前缀串,输出前缀串的长度和循环的次数(大于一才算循环串)思路:同上一道题一样,也是求循环节,这里,枚举长度为2-N的所有前缀串(next数组可以一次预处理求出),求出其最小循环节,判断前缀串长度是否可以整除循环节长度整除,并且前缀串长度不等于循环节长度原创 2012-06-27 17:13:08 · 698 阅读 · 0 评论 -
[KMP-next数组特性]HDU 2594 Simpsons’ Hidden Talents
如果不了解next数组前缀后缀特性的请看我以前写的一道题:http://blog.csdn.net/airarts_/article/details/7686441传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2594题目大意:给定字符串s1,s2要求出s1的最长前缀,同时还是s2的最长后缀,输出该字符串和其长度.解题思路:利用前缀后缀特性原创 2012-06-27 17:37:16 · 756 阅读 · 0 评论 -
Codeforces #163 Div2 E
传送门:http://codeforces.com/contest/266/problem/E代码:#include#include#includeusing namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mid(x,y) (x+y)>>1#define mod原创 2013-01-27 15:09:01 · 566 阅读 · 0 评论 -
SplayTree实现
templateclass SplayTree{#define null 0private: int MAXSIZE; int *l,*r,*p,*pool,*depth; int top,root,tot; DataType *key; int malloc(DataType k){ int node; if(top原创 2013-01-30 23:41:49 · 474 阅读 · 0 评论 -
Splay解决区间问题[单点更新,区间最值询问]
/*http://acm.hdu.edu.cn/showproblem.php?pid=1754*//*单点更新,区间询问 splay实现*//*注意写rotateTo的时候。。*/#include#include#include#includeusing namespace std;const int MAXN = 222222;class SplayTree{ #de原创 2013-01-31 21:20:54 · 970 阅读 · 0 评论 -
SplayTree实现_简化版
(1)templateclass SplayTree{#define MAXN 1000010private: int ch[MAXN][2],pre[MAXN],pool[MAXN]; DataType key[MAXN]; int top,root,tot; int malloc(DataType dt){ int x;原创 2013-01-31 18:54:32 · 470 阅读 · 0 评论 -
Splay解决区间问题[区间更新,区间求和]
/*http://poj.org/problem?id=3468*//*区间更新,区间求和*//*注意各种编码细节,特别是splay buildTree和 rotateTo*//*仔细体会与线段树解决区间问题的不同点,如结点记录的信息是不同的*//*lazy思想*/#include#include#includeusing namespace std;const int MAXN原创 2013-01-31 22:50:29 · 986 阅读 · 0 评论 -
Splay解决区间问题[区间切割,区间翻转]
区间翻转:由于以root为根的树的中序遍历表示该区间,那么翻转只要递归的交换左右子树即可,加入lazy思想,降低时间复杂度。Tips:做区间翻转的时候rev[rt]的含义是——以rt为根的子树所表示的区间是否将要被翻转,目前并没有执行翻转操作,如果改成先翻转,再标记,就会出现大问题。Code:没用的push_down写多了。/*http://acm.hdu.edu.cn/showpro原创 2013-02-02 23:44:23 · 1039 阅读 · 0 评论 -
DancingLinks[HUST_1017]
因为输出少了个\n WA了半天。 而且以下两种写法效率不一样。 有待研究DancingLinks用于优化搜索,核心在于resume操作,可以快速恢复被删除的结点1. 1468ms /*http://acm.hust.edu.cn/problem.php?id=1017*//*DLX*/#include#include#include#includeusing原创 2013-03-06 12:11:14 · 786 阅读 · 0 评论 -
AC自动机代码
HDU 2222 Keywords Search原创 2014-07-22 22:16:06 · 695 阅读 · 0 评论 -
[树状数组]HOJ 10069 星星的等级
传送门:http://acm.hnu.cn/online/?action=problem&type=show&id=10069&courseid=0题目描述:给定若干个二维平面上 的点,如果a.x=b.y则说a的等级比b高(如果a==b,则他们等级相同),要求对于每个点,输出比他等级高的点的总数。解题思路:把星星按照y的递减序和x的递增序排序,然后对x轴建立树状数组,依次将每个星星插入树状原创 2012-06-23 23:39:49 · 1131 阅读 · 0 评论 -
[KMP-NEXT数组性质]POJ 2752 Seek the Name, Seek the Fame
传送门:http://poj.org/problem?id=2752题目描述:要求求出字符串S所有满足如下条件的子串长度(1.子串T为S的前缀 2.子串T为S的后缀)。解题思路:利用KMP的NEXT数组的特性,Next[pos]的含义是在pos处失配时pos应该指向的下一个位置,那么0-(Next[pos]-1)构成的字符串和(pos-Next[pos])-(pos-1)构成的字符串是相同原创 2012-06-23 18:12:02 · 1120 阅读 · 0 评论 -
[平衡树]BallIntheBox
题目还是牛耳杯程序设计大赛的D题,之前已经描述过,就不在赘述了。之前用AVL实现的,这里附上一个用SBT实现的版本,对比发现SBT实现更为简单,而且时空消耗略少。 搓长丑的SBT代码:#include#include#include#include#includeusing namespace std;const int MAXN = 100010;struct KE原创 2012-03-27 20:11:44 · 516 阅读 · 0 评论 -
[SBT]POJ 2761 Feed the dogs
题目链接:http://poj.org/problem?id=2761题意:给定一个序列,有N个数,给定M个询问,询问的形式为 a b c ,询问区间[a,b]内第c小的数。解题方法:一次性读入所有的询问,然后把询问进行排序,排序的顺序为终点小的在前,终点一样,起点大的在前,然后对排序后的每个询问进行处理,每次保证SBT中只有区间[a,b]的数(用插入和删除操作来保证),然后查询第K小。原创 2012-03-29 13:16:44 · 755 阅读 · 0 评论 -
[BST-SBT]POJ_3481_double queue
题意:裸的平衡树题平衡树功能:插入,删除最大,删除最小挂一个SBT模板吧,明天就校赛了,所以重写了一下SBT,把原来的删除操作改了下:#include#includeusing namespace std;const int MAXN = 1111111,INF = 10000001;struct Key{ int k,p; Key(){} Key(in原创 2012-05-27 00:38:56 · 665 阅读 · 0 评论 -
[树状数组]LightOJ 1266 - Points in Rectangle
1266 - Points in RectanglePDF (English)StatisticsForumTime Limit: 2 second(s)Memory Limit: 32 MBAs the name says, this problem is about finding the numb原创 2012-05-11 12:48:14 · 828 阅读 · 0 评论 -
[树状数组]LightOJ 1085 - All Possible Increasing Subsequences
1085 - All Possible Increasing SubsequencesPDF (English)StatisticsForumTime Limit: 3 second(s)Memory Limit: 64 MBAn increasing subsequence from a sequen原创 2012-05-11 11:50:07 · 758 阅读 · 0 评论 -
[离散化+蛮力]POJ_1151_Atlantis
题意:求矩形面积并分析:本来是要学习扫描线的,不过还没看懂。。囧。。在看了黑书之后,发现这题数据规模如此小(100个矩形),于是YY出了一种方法: 1.首先把X,Y坐标都进行离散化。 2.离散化之后,将整个平面划分成很多面积不等的小矩形。 3.枚举每个大矩形,得到大矩形离散化后的左上角点和右下角点的位置。原创 2012-05-14 00:48:40 · 542 阅读 · 0 评论 -
[离散化+线段树+扫描线]POJ_1151_Atlantis
题意:求矩形面积并 前天直接用“矩形切割”(我也不知道我那方法是不是矩形切割,姑且打上引号吧),过掉了这个题,那个猥琐的算法达到了O(n^3),如果题目数据很大的话,还是不行的,所以这两天还是继续学习扫描线,发现网上的很多文章讲的都不算很清楚,于是翻除了1999年陈宏的论文,开始研究,最终总算搞定了扫描线这个玩意儿。 注意点:要理解论文中提到的测度(即线段并的长度)和连续段的含义(原创 2012-05-15 14:38:14 · 645 阅读 · 0 评论 -
[离散化+线段树+扫描线]POJ_2091_Picture
题意:求矩形周长并。 总结:这道题也算是很经典的一道扫描线题吧,就是陈宏论文上面提到的那道IOI的试题,也算试了一下用扫描线法求矩形的周长并. 注意点:1.几个必须要的域,cnt-区间被线段覆盖的次数,sum-测度,seq-连续段数,lbd-是否包含区间的左边界,rbd-是否包含区间的右边界,其中lbd,rbd是为了求得seq的。 2.理解线段插入删原创 2012-05-16 00:18:07 · 674 阅读 · 0 评论 -
[线段树+区间求和]LightOJ 1183 - Computing Fast Average
题目链接:http://lightoj.com/volume_showproblem.php?problem=1183 1183 - Computing Fast AveragePDF (English)StatisticsForumTime Limit: 2 second(s)Memory Limit: 64 MB原创 2012-05-18 09:21:17 · 1023 阅读 · 0 评论 -
[离散化+线段树+扫描线]POJ_3832_Posters
题意:给定N个海报,海报中间被挖掉了一个矩形的孔,所有的海报贴在(0,0)-(50000,50000)的矩形区域里,求海报覆盖的面积。 思路:把1个海报分成四个小矩形,求矩形面积并。(很裸) 各种蛋疼: 1.建立段树一定要记得加判断,对于插入一个点的情况不予考虑(比如插入区间为0,0)或者在线段树里面加判断(l==r-1)return;(不加的话等原创 2012-05-17 12:21:42 · 663 阅读 · 0 评论 -
[线段树+区间染色]LightOJ 1207 Posters for Election
传送门:http://lightoj.com/volume_showproblem.php?problem=1207 题意:区间染色,询问区间中不同颜色的总数,这题实际上是POJ 上 Mayor poster 的削弱版,不需要离散化(那题的离散化要特殊处理),直接建树+成段更新+query即可。(需要简单哈希一下) 代码:#include#include#includeu原创 2012-05-18 01:25:04 · 1022 阅读 · 0 评论 -
[离散化+扫描线+线段树]LightOJ 1120 - Rectangle Union
传送门:http://lightoj.com/volume_showproblem.php?problem=1120 1120 - Rectangle UnionPDF (English)StatisticsForumTime Limit: 2 second(s)Memory Limit: 64 MB原创 2012-05-18 01:52:00 · 1063 阅读 · 0 评论 -
大数模板
该模板来自于吉林大学ACM模板库#includeusing namespace std;const int base = 10000;const int width = 4;const int N = 1000;struct bint{ int ln,v[N]; bint(int r=0){ for(ln = 0;r>0;r/=base)v[l原创 2012-06-13 12:08:17 · 479 阅读 · 0 评论 -
[线段树+离散化]LightOJ 1089 - Points in Segments (II)
题目描述:Given n segments (1 dimensional) and q points, for each point you have to find the number of segments which contain that point. A point pi will lie in a segmentA B if A ≤ pi ≤ B.For example原创 2012-06-22 10:38:04 · 1488 阅读 · 0 评论 -
[线段树]LightOJ 1093 - Ghajini
1093 - GhajiniPDF (English)StatisticsForumTime Limit: 1 second(s)Memory Limit: 32 MBAmir is having a short term memory problem. He can't remember anythi原创 2012-06-22 10:41:59 · 1132 阅读 · 0 评论 -
[线段树|平衡树|树状数组]LightOJ - 1087 - Diablo
1087 - DiabloPDF (English)StatisticsForumTime Limit: 2 second(s)Memory Limit: 64 MBAll of you must have played the game 'Diablo'. It's an exclusive game原创 2012-06-21 00:57:49 · 1858 阅读 · 0 评论 -
[KMP求模式在主串出现次数]POJ 3461 Oulipo
传送门:http://poj.org/problem?id=3461题目大意:给定一个主串和一个模式,求模式在主串中出现的次数。解题思路:直接修改标准KMP函数,当匹配成功是不是跳出循环,而是直接按最后一个字符失配的情况去滑动模式串,以获取下一个可能出现的匹配。代码:#include#include#includeusing namespace std;const in原创 2012-06-23 17:14:55 · 734 阅读 · 0 评论 -
RMQ-ST
http://acm.hdu.edu.cn/showproblem.php?pid=3183给定大小为N的一串(0-9)的数字,选择N-M个数字()原创 2014-08-17 17:58:17 · 809 阅读 · 0 评论