
数据结构
文章平均质量分 76
SwustLian
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HGU3336 Count the string (KMP Next数组的应用)
题意:给出一个字符串,求它所有前缀在此字符串中出现的次数。 分析:一看,肯定是kmp中 next[i] 求以下标i-1结尾的字符串,使得最长的(前缀==后缀)的长度。很好想到,当next非零时,肯定和前缀有匹配,自然ans+1。当一个前缀出现多次,当next[j]!=0,ans+1,j=next[j],一直往前跳,直到next[j]为0,如果不为0,ans+1。这里比较难理解,next[i]表示原创 2015-07-27 11:01:07 · 380 阅读 · 0 评论 -
CodeForces 195B After Training(STL)
题意:有n个球,m个篮子, 要把这n个球放进这些篮子,首先放篮子中求最少的篮子,若数量相同再放距离中间篮子最近的,若距离相同放篮子编号小的。 分析:这道题可以用线段树,set,优先队列 都可以搞 #include #include #include #include #include #include #include #include #include #includ原创 2015-08-07 15:39:08 · 436 阅读 · 0 评论 -
Simpsons’ Hidden Talents(KMPnext[]的应用)
题意:给两个字符串,求最大的第一字符串的前缀等于第二个字符串的后缀 分析:先把两个字符串连接起来,再求出Next[]。这样next[]数组的最后一位存的就是ans.但是要考虑两个字符串求前后缀发生越界的情况,如图, 假如这种情况,两个字符串发生了越界,。此时l1~r1==l2~r2,l1~z1==l2~z2,l2~z2==z3~r2。同时,z2~r1肯定等于z3~r2。=>l1~z1==z3~原创 2015-07-25 09:26:51 · 285 阅读 · 0 评论 -
KMP模板
#include #include #include using namespace std; char s[1000001]; int next[10005];//next[i] 0-i字符串最大匹配数 /* * next[]的含义:x[i-next[i]...i-1]=x[0...next[i]-1] * next[i]为满足x[i-z...i-1]=x[0...z-1]的原创 2015-07-25 09:20:56 · 264 阅读 · 0 评论 -
UVA11997 K Smallest Sums(并归,优先队列)
题意:有k行数,每行k个数,从每行中抽出一个数,相加得到sum, 求这样的sum的前k小数,并输出。 分析:大白书(刘汝佳 著)优先队列章节, 假设现在有两行A,B(从小到大排序),求前k小,则: A1+B1 A2+B1 A3+B1 ........... 用一个优先队列来维护前k小的值,先把(A1+B1),(A2+B1),(A3+B1)...放入队列,但这k个数不一定是前k原创 2015-07-23 23:07:54 · 450 阅读 · 0 评论 -
hdu 5360 Hiking 多校6 优先队列
题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须满足c>=l[i]&&ci,问你邀请的顺序是什么才能使尽可能多的人去远足,若有多个最优解,输出任意的一个。 思路:很容易想到,在左值满足的情况下找最小的右值。但是N #include #include #include #include #include #include #inclu原创 2015-08-12 11:38:38 · 300 阅读 · 0 评论 -
HDU1828 Picture 周长并 线扫描
题意:给出n个矩形,求他们的轮廓的周长. 以这个图为例 我们只看红色的(横线)不看竖线,他讲的是只扫描一次的做法。 第一次求出的部分是第一次覆盖的长度。 第二次求出的为什么会少了中间那部分.那是因为插入的新线段覆盖了第一条,此时线段树返回的长度是新的那一条的 长度,插入第二条横线后,得到的总的长度-之前总的长度 第三次因为是矩形的上边,是出边,该线段的标记c原创 2015-07-29 09:46:38 · 346 阅读 · 0 评论 -
志愿者选拔(单调队列)
Description 世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动。 参加志愿者选拔的同学们排队接受面试官们的面试。参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查。 面试中每个人的人品是主要考查对象之一。(提高人品的方法有扶老奶奶过街,不闯红灯等) 作为主面试官的John想知道当前正在接受面试的同学队伍中人品值最高的是多少。于是他请你帮忙编写一个原创 2015-07-16 20:40:03 · 487 阅读 · 0 评论 -
HUD 1255 面积覆盖 线扫描
求面积交 #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define maxn 11005 struct line { double x1,x2,h; int c;原创 2015-07-29 09:18:26 · 273 阅读 · 0 评论 -
CodeForces 527C Glass Carving(multiset)
题意:给你一个w*h 的玻璃,有n个操作,在第几行画线或者在第几列划线分层小块,每次操作后问小块中的最大面积 分析:multiset H,v,a1,a2; H是存的划线的高度的id,v的每次画竖线的id。a1存H的差值,a2存v的差值 #include #include #include #include #include #include #include #include原创 2015-08-10 09:57:47 · 553 阅读 · 0 评论 -
HDU1542 Atlantis(面积并)
题意:给出n个矩形的 左下角和右上角坐标,计算他们覆盖的面积。 #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define maxn 11005 struct line {原创 2015-07-29 08:59:24 · 358 阅读 · 0 评论 -
HDU 5316 Magician(线段树 区间合并)
题意:给你n(n 分析:最初没读懂题意。。。。 一看数据范围和查询方式,肯定和线段树相关,问题的要求又有点像DP。分析知道,其实就是求线段树的区间合并问题,取出的序列只可能是以奇数开头奇数结尾,奇数开头偶数结尾,偶数开头偶数结尾,偶数开头奇数结尾。用jj,jo,oo,oj表示。当合并的适合考虑这四种情况就是可以了。 jj=max(l.jj ,r.jj, l.jj+r.oj, l.jo+r原创 2015-08-08 08:14:11 · 403 阅读 · 0 评论 -
HDU3746 Cyclic Nacklace(KMP_Next的应用)
题意:给一个字符串,求再在后面添加几个字符串可以使得整个字符串循环。 #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define maxn 200000+5 int Next[ma原创 2015-07-27 21:11:28 · 308 阅读 · 0 评论 -
HDU3911 Black And White(黑白子)
题意:给一行棋子(只有黑色和白色,1为黑,0为白),长度为100000。有m个操作,x,l,r 若x==0,查询(l,r)区间内连续的黑棋最大数量,若x==1,翻转(l,r)区间。 #include #include using namespace std; #define maxn 500001 int n,m,a[maxn]; int max(int x,int y,int z) {原创 2015-11-06 14:40:53 · 460 阅读 · 0 评论