自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

No__stop

No one could stop you, as surely want it .

  • 博客(14)
  • 资源 (2)
  • 收藏
  • 关注

原创 hdu 4705 Y (树形dp)

hdu 4705 Y 题意:在一棵树上找三个点,这三个点不构成一条链的有多少种取法。解题思路:把题意转化一下,找三个点能够构成一条链的有多少种取法,然后用用总数减掉就可以了。那么怎么找构成链的取法呢?对于某一个点,我们认为这个点是必取的,然后再从其他地方取两个,把枚举所有点时得到的方案数累加起来,再除以3,就是答案。为什么除以3?因为一条链上的三个点,对于枚举任一个点的时候,这条链都被计算

2013-08-22 18:49:50 1111

原创 hdu 4699 Editor(splay tree 伸展树)

hdu 4699  Editor题意:对一个数列进行操作,光标位置后面插入一个权值为x的数,删除光标前的那个数,光标左移一位,光标右移一位,求到k位置的最大的前缀和。。解题思路:标乘是用了栈进行维护。。我这智商比较捉急啊,用了splay。节点下要记录的是该几点所掌控的子树的前缀最大值是多少,那么要维护这个最大值,就需要一个辅助变量,sum[rt]表示rt节点所掌控的子树的所有数的和,怎么维

2013-08-22 18:30:57 1643 1

原创 hdu 1890 Robotic Sort (splay tree伸展树)

hdu 1890 Robotic Sort 题意:给出一个n个数的数组,给他进行排序。排序的过程是这样的,对于第i次找到第i大的数在哪一个位置,输出这个位置,然后从第i个位置开始到找到的位置,将这个区间翻转一遍(此时第i大的数肯定在i位置了,显而易见),进行n-1次后这个数列就有序了。解题思路:splay tree 伸展树,要记录的延迟标记是一个翻转标记,col[i]表示翻转了几次(奇数次

2013-08-21 18:28:47 1585

原创 hdu 4691 Front compression (后缀数组)

hdu 4691 Front compression题意:很简单的,就是给一个字符串,然后给出n个区间,输出两个ans,一个是所有区间的长度和,另一个是区间i跟区间i-1的最长公共前缀的长度的数值的长度,加上不是公共部分的字符个数,加2,累加起来。解题思路:后缀数组裸题。。用rmq求最长公共前缀,询问就是o(1)的。有队伍用暴力的方法过的,对于i区间与i-1区间,如果左端点一样,就去长

2013-08-20 19:37:48 1877 1

原创 hdu 2871 Memory Control(伸展树splay tree)

题意:就是对一个区间的四种操作,NEW x,占据最左边的连续的x个单元,Free x 把x单元所占的连续区间清空 , Get x 把第x次占据的区间输出来, R 清空整个区间。解题思路:这个题就是一个区间合并,以前用线段树写的,拿来练练splay。要记录的是区间最大的连续空格,要维护这个最值,需要两个辅助的值,该区间左边连续的最值和右边连续的最值。更新的时候仔细就好了,其他就是splay的常规

2013-08-20 19:28:29 1302

原创 hdu 1754 I Hate It (splay tree伸展树)

hdu 1754 I Hate It其实我只是来存一下我的splay模板的。。请大牛们多多指教#include#include#includeusing namespace std ;const int maxn = 222222 ;int son[2][maxn] , col[maxn] , fa[maxn] , size[maxn] , val[maxn] ;int t

2013-08-18 13:57:36 1600

原创 poj 3693 Maximum repetition substring (后缀数组)

其实是论文题。。题意:求一个字符串中,能由单位串repeat得到的子串中,单位串重复次数最多的子串。若有多个重复次数相同的,输出字典序最小的那个。解题思路:其实跟论文差不多,我看了很久没看懂,后来总算理解了一些。假设我们的单位串长度为l,那么我们将串划分为s[0] , s[l] , s[2*l] , s[3*l]。。这样,可以根据l划分为n/l段。枚举一个j,表示当前枚举的位置为s[j*l

2013-08-17 14:39:06 971

原创 hdu 4679 Terrorist’s destroy (树形dp)

hdu 4679 Terrorist’s destroy4小时55分敲完代码,0调试,跑出样例直接交了,结果爆栈,扩栈交了一发,居然A了,我和我的小伙伴们都惊呆了。。。题意:给出有n个节点的一棵树,树上的边有权值。我们切断一条边,将整棵树分成两颗,计算一个值,这个值的计算方法,v = b * max ( d1 , d2 ) ;其中,b为所切的边的权值,d1 ,d2 为切断后形成的两颗树的树

2013-08-15 19:00:47 1117

原创 ural 1297 Palindrome求最长连续回文子串(后缀数组求法)

ural 1297 Palindrome题意:很简单,求最长连续回文子串。解法:这题数据范围非常小,长度只有2000,用dp,n^2可以做,但如果长度变成100000了呢?后缀数组就可以发挥威力了。将原串翻转后接到原串后面,构成一个新的串,枚举前n个字符,设该字符为i,以它为中点的最长回文子串的长度就是。。自己去算算吧,很简单的,注意考虑奇偶。#include#include#in

2013-08-14 19:54:44 1053

原创 poj 3294 Life Forms (后缀数组)

poj 3294 Life Forms题意:给出n个字符串,问这n个字符串中,一半以上字符串拥有的最长连续公共子串有多少,按字典序全部输出来。解题思路:一般这种最长连续公共子串什么的都是后缀数组,二分答案。。先将n个字符连起来,预处理一遍,sa,rank,height都算出来(这些我都放在模板里),然后就是二分答案了。在判断某个长度是否符合要求时,根据height值,将按height值排序

2013-08-14 16:17:01 1006

原创 hdu 4661 Message Passing(树形dp)

题意:比较容易懂,就是n个人,构成树形关系。每个人有一条独一无二的信息,每个人可以将自己的信息通过树边,共享给与他相邻的人,共享之后,被共享的人拥有他原有的信息和共享的来的信息。每次共享为一次操作,问每个人都拥有所有人的信息最小要的次数的共享方法有多少种。解题思路:首先要明确的是,我们共享信息的策略是,将所有信息都共享给某一个人,再由这个人将所有信息反馈给其他人,这样共享信息的总操作次数是2*

2013-08-09 19:31:14 1555

原创 uva 719 - Glass Beads最小表示法模板

uva 719 - Glass Beads#include#include#includeusing namespace std ;char s[111111] ;int main (){ int n , i , j , k , p1 , p2 , cas ; scanf ( "%d" , &cas ) ; while ( cas -- ) { scanf ( "%s

2013-08-04 17:09:13 1154

原创 线段树(先占个坑,有空去填)

uva11983 - Weird Advertisement(扫描线)#include#include#include#define ll long long#define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1using namespace std ;const int maxn = 611111 ;

2013-08-03 20:17:53 816

原创 hdu 4638 Group

hdu 4638 Group题目大意:题面意思不解释了,转换成数学模型,就是问一段区间[l,r]有几段连续的数,比如[2,3,1,4,6,7]那么这段区间内有两段,分别是1,2,3,4和6,7。解题思路:由于询问次数有100000次,所以我们直接处理[l,r]显然不行。线段树在线似乎也是做不了的。可以想到的是,如果我们从左到右一个个加进来,那么对于加进来的第i个数num[i],那么它就能增

2013-08-02 14:32:47 1443

AC自动机练习题

AC自动机练习题,加简单的思路。。又要详细思路及代码的可以到我博客里看,也可以联系我。

2013-05-27

rmq算法(倍增)

rmq算法,有详细注释 dp1[i][j] = max ( dp1[i][j-1] , dp1[i+(1<<(j-1))][j-1] ) ; dp2[i][j] = min ( dp2[i][j-1] , dp2[i+(1<<(j-1))][j-1] ) ;

2012-12-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除