HDU
文章平均质量分 78
sdj222555
这个作者很懒,什么都没留下…
展开
-
HDU 4763 EXKMP
题意是在一个字符串中找出一个前缀一个后缀和一个中间的子串,互相不重叠并且三部分完全一样运用的是exKMP对自身求一个next数组next[i]表示以i为开始位置的子串与整个串的前缀最长匹配到多少长度然后就是枚举了首先求一个可能存在的最大长度。在一个位置i中,如果要满足要求,子串的最大长度不能超过 min(i, next[i], (len - i) / 2);所原创 2013-11-01 14:47:56 · 2667 阅读 · 0 评论 -
HDU 4125 2011福州现场赛E题 KMP+笛卡尔树
题意就不描述了。 主要说一下我的构造第一个串的过程对给出的序列,比如5 1 3 2 7 8 4 6 给每个数按输入的顺序对应一个编号5 1 3 2 7 8 4 61 2 3 4 5 6 7 8然后我们手动建这颗二叉搜索树。观察它,可以发现,每个结点的编号是满足堆的性质。也就是如果把这个编号当做每个结点的第二个关键字,这就是原创 2012-09-12 11:42:44 · 3743 阅读 · 0 评论 -
HDU 4374 单调队列优化 DP
这题的转移很明显。用dp[i][j] 表示到达i层j位置时的最大得分sum[i][j] 表示第i层前j个数的和dp[i][j] = max(max(dp[i - 1][j + k] + sum[i-1][j +k-1] - sum[i - 1][j - 1] + score[i][j]), max(dp[i - 1][j - k] - sum[i-1][j -k] + sum[i -原创 2012-08-16 21:50:49 · 1756 阅读 · 1 评论 -
HDU 4056 涂色 并查集
这题用线段树写的话会很恶心人 并且不是现场赛的话,HDU上内存有限制所以就是用并查集来搞这种涂色问题,并且效率上也快一些这种方法之前也接触过 详见从acmol的空间看的http://blog.acmol.com/?p=751#include #include #include #include #include #include #include #includ原创 2012-09-05 13:41:51 · 1383 阅读 · 0 评论 -
POJ 4370 0 or 1 图论模型的转化
这题的优点就在于模型的转化转化完就是个非常简单的最短路了显然,题目给的是一个0/1规划模型。解题的关键在于如何看出这个模型的本质。3个条件明显在刻画未知数之间的关系,从图论的角度思考问题,容易得到下面3个结论:1.X12+X13+...X1n=1 于是1号节点的出度为12..X1n+X2n+...Xn-1n=1 于是n号节点的入度为13.∑Xki原创 2012-08-16 20:18:30 · 774 阅读 · 0 评论 -
POJ 3642 长方体体积并 线段树 扫描线
这题就是给出了好多个长方体, 求出那些被覆盖了 3次及以上的体积我们注意到z的范围很小,而且就给了1000个长方体那么可以把z坐标离散化然后在相邻的z坐标空间内,就变成了求面积覆盖记录三个变量,代表一次覆盖,两次覆盖,三次覆盖及以上#include #include #include #include #include #include #include原创 2012-08-29 14:24:20 · 1325 阅读 · 0 评论 -
HDU 4366 树转化为连续序列 线段树
这题跟 http://poj.org/problem?id=3321 这题的转化形式基本一样本题给的是一棵树。 然后找子孙中能力值大于父节点并且忠诚最高的。由于树的结构不好搞线段树,所以要映射到一个连续序列上搞,把这个结点的子树都能映射到一个连续区间上就好办了。很常见的套路就是DFS时间戳,记录进入结点的时间戳和出结点的时间戳,两个时间戳之间的都是这个结点的子孙结点了。而我们要找能原创 2012-08-15 00:52:54 · 1149 阅读 · 0 评论 -
HDU 4360 最短路变形
题目大意是给一个n个点m条边的无向图。每条边有权值和一个字母标号,字母标号有四种 'L' 'O' 'V' 'E'现在要从1点到n点去找求找到一条路径,路径按顺序构成了若干个LOVE 注意必须是完整的LOVE然后要求有LOVE的的条件下路径最短,如果有多条最短路,找LOVE最多的那条思路就是拆点将每个点分为四个,代表L,LO,LOV, LOVE四种状态然后跑spfa即原创 2012-08-14 18:35:32 · 1349 阅读 · 0 评论 -
HDU 3879 Base Station 最大权闭合图
一道稍微有点变形的题对每条边,新增一个点代表这条边,该边点与边的两个端点分别连有向边,容量为无穷大,此时就转化为了一个最大权闭合图的模型,该边点的权值为正,而两个端点的权值则为负,按照普通建图方法建图即可。#include #include #include #include #include #include #include #include #include #de原创 2012-07-28 23:53:05 · 928 阅读 · 0 评论 -
HDU 1853 Cyclic Tour KM算法
此题的模型转化比较好题目说是有向图,把图分成一些环,使得构成这些环总的边权值最小, 环的特性是最少两个点。观察环这个限制,实际上就是每个点有且只有一个出边,有且只有一个入边,并且不能是自环这可以跟匹配联系起来,将每个点拆成u, u' 然后 如果有一条边(u,v, w)就建一条(u, v ', w)的边最后求匹配,如果左边的点都匹配到了,显然是每个点都有了一个出边,右边的点都原创 2012-08-11 17:14:50 · 875 阅读 · 0 评论 -
HDU 4351 Digital root 线段树 区间合并
看了解题报告后说有一种离线不用线段树的做法,表示不解只会用线段树做因为题目中所查询的区间,是所有的子区间的结果的并。所以区间合并就很必要了。每个结点,记录这个区间的和的数根, 记录本区间内从左端点为端点往右的连续区间出现的数根,从右端点为端点往左的连续区间出现的数根,以及整个区间能出现的数根比赛的时候狂WA一下午。最后发现查询的时候左右区间合并有问题,查询的时候也需要像push原创 2012-08-10 03:09:30 · 1192 阅读 · 0 评论 -
HDU 4335 What is N? 简单数论
此题就是考察了一个简单的公式a^x % c = a^(x % phi(c) + phi(c)) %c 其中x>= phi(c)phi(c)为欧拉函数注意 欧拉函数的定义为 不超过n且与n互素的正整数的个数 而不是小于n并且phi(1) =1 然后对于本题 分成三部分第一部分 n! 第二部分 n! >= phi(c) 但是 n! % phi(c)原创 2012-08-04 13:44:00 · 1607 阅读 · 0 评论 -
HDU 3374 KMP +字符串最小表示
求字符串最小表示的方法(1) 利用两个指针p1, p2。初始化时p1指向s[0], p2指向s[1]。 (2) k = 0开始,检验s[p1+k] 与 s[p2+k] 对应的字符是否相等,如果相等则k++,一直下去,直到找到第一个不同,(若k试了一个字符串的长度也没找到不同,则那个位置就是最小表示位置,算法终止并返回)。则该过程中,s[p1+k] 与 s[p2+k]的大原创 2011-08-27 21:30:48 · 962 阅读 · 0 评论 -
HDU 3756 三分法求极值
题意就是给出了一些点求一个最小的圆锥体能把这些点都包含进去要求这个圆锥体的顶点必须在z轴正上方并且底面必须在x-y面上不难发现这其实就是一个求极值的问题。底面的半径取的太小或者太大都会导致圆锥体的体积太大。所以用三分底面半径的方法,每次求高是所有的点中求出的高最大的那个#include #include #include #include #include原创 2012-09-14 00:23:17 · 1547 阅读 · 0 评论 -
HDU 3760 Ideal Path 最短路+BFS
这题的话其实想是比较好像的,就是写起来代码比较多题目大意就是给出了一个无向图,每条边有一个编号。然后让我们求一条编号字典序最小的最短路那么首先我们做两遍SPFA,分别求出起点到所有点的距离,以及终点到所有点的距离这样我们就能判断某个点是否是最短路上的点之后我们进行BFS ,其实刚才求最短路BFS也行,因为每条边的权值都是1.然后BFS是这样的,假设我们已经BFS了x层了,然原创 2012-09-14 00:36:23 · 1810 阅读 · 0 评论 -
HDU 3749 Financial Crisis 点双连通分量
给一个无向图, n 然后给出若干的询问(方法:求点的双连通分量。然后一个割点,有可能属于多个点双连通分量。所以我们要是用vector把每个点属于的点双连通分量的编号都存起来。然后我们要计算每个点双连通分量中的边的个数。 因为有那种只有一条边的双连通分量。计算的方法就是查看边得两个端点所属的双连通分量,如果两个端点有同属于的一个双连通分量,就把对应的数目加1原创 2013-10-30 21:42:52 · 2222 阅读 · 1 评论 -
HDU 4456 Crowd 坐标旋转 二维树状数组
大意就是给出一个矩阵初始每个位置上的值都为0然后有两种操作一种是更改某个位置上的值另一个是求某个位置附近曼哈顿距离不大于K的所有位置的值的总和然后这里用了一个非常牛叉的技巧将所有点绕原点左旋45°然后新的坐标也很好计算x' = (x - y) * sqrt(2) / 2y' = (x + y) * sqrt(2) / 2由于都是小数所以乘个sqr原创 2013-09-01 16:29:14 · 2167 阅读 · 0 评论 -
HDU 4685 二分图匹配+tarjan
这题跟POJ的1904很像。大意就是有n个王子和m个公主每个王子都会喜欢若干个公主,也就是王子只跟自己喜欢的公主结婚公主就比较悲惨, 跟谁结婚都行然后输出王子可能的结婚对象必须保证王子与任意这些对象中的一个结婚,都不会影响到剩余的王子的配对数,也就是不能让剩余的王子中突然有一个人没婚可结了然后思路其实跟POJ1904非常像。但是POJ那题给出了初始的一个完备原创 2013-08-15 21:08:48 · 4069 阅读 · 0 评论 -
HDU4606 Occupy Cities 计算几何+最小路径覆盖
题目大意如下在一个二维坐标系中,有n个城市,坐标给出来了,然后有p个士兵要去占领这n个城市,但是路上有m个路障,都是线段,士兵不能越过路障前进。每个士兵都有相同容量大小的一个干粮袋,每到一个城市他就能补充满自己的干粮袋。中途走路时走一个单位长度就消耗一个单位的干粮。现在问的是这些个干粮袋最小的容量是多少,前提是保证p个士兵能占领完这n个城市,城市被占领顺序也是题目给好的,必须遵守原创 2013-08-15 09:31:47 · 1318 阅读 · 0 评论 -
DU 4609 3-idiots FFT
题意还是比较好懂。给出若干个木棍的长度,问这些木棍构成三角形的可能性。那么公式很容易知道就是这些木棍组成三角形的所有情况个数 除以 从n个木棍中取3个木棍的情况数量C(n, 3) 即可但是很显然分子不太好求。 因为木棍数据量是n^5暂时没有办法,于是看到木棍的边长,数据量也是10^5,似乎预示着什么那么我们可不可以这样:根据三角形的性质,两边之和大于第三边。我们就枚原创 2013-08-06 10:53:58 · 1150 阅读 · 0 评论 -
HDU 1402 FFT 求 大数乘法
这题的数据量是5w, 也就是传统意义上的n^2算法是不可取的。这里就用到了FFTFFT一般的作用就是使得多项式乘法的复杂度降到nlogn。利用FFT可以快速求出循环卷积。那么卷积又是什么样一个东西。----------------------------------------以下内容转自http://blog.sina.com.cn/s/blog_6733026501019u原创 2013-08-06 10:13:43 · 8244 阅读 · 3 评论 -
HDU 4605 Magic Ball Game 树状数组
题目大意很简单。有一颗树(10^5结点),所有结点要么没有子结点,要么有两个子结点。然后每个结点都有一个重量值,根结点是1然后有一个球,从结点1开始往子孙结点走。每碰到一个结点,有三种情况如果此球重量等于该结点重量,球就停下了如果此球重量小于该结点重量,则分别往左右儿子走的可能都是1/2如果此球重量大于该结点重量,则走向左儿子的概率是1/8,右儿子的概率是7/8然后若干原创 2013-08-04 13:00:12 · 1824 阅读 · 0 评论 -
HDU 4604 Deque 二分最长上升子序列
题目大意就是给一个deque然后有n个数,依次进行操作,每种操作,你可以把这个数放在deque首部,也可以放在尾部,也可以扔掉不管,但是要保证deque中的数是非递减的。最要求deque中最长能是多少思路是这样的:对于这个序列,最重要的应该是第一个进去的数是什么,然后以该数为开头的最长不升子序列和以该数为开头的最长不降子序列则可以凑成一个最长的序列,当然这两个序列中可能都出现了该数原创 2013-08-02 21:10:32 · 2383 阅读 · 4 评论 -
HDU 4602 Partition 规律题
貌似是个比较简答的规律题。 解题报告中说的很详细我们可以特判出n 对于1 情况考虑: 第一种情况,被选出的不包含端点,那么有(n – k − 1)种情况完成上述操作,剩下未被圈的点之间还有(n – k − 2)个位置,可以在每个位置断开,所以共 2^(n−k−2) ∗ (n−k−1)种方法。 第二种情况,即被选出的包含端点,那么有2 种情况,并且剩余共(n – k −原创 2013-08-04 08:59:54 · 1538 阅读 · 0 评论 -
HDU 4419 矩形面积并
这题貌似想法挺简单的。跟普通的矩形并变形一下把三种颜色分别对应一个二进制位,那么用十进制数表示 R, G, B, RG, RB, GB, RGB就是 1,2,4,3,5,6,7然后在pushup操作中把这些东西更新一下就行了注意,普通矩形并是一条线段表示进入矩形,另一条表示出了矩形,那么本题中就对三种颜色分别记录了当时比赛的时候写的比较蛋疼。完全是码农写法。其实完全可以写的原创 2012-09-24 01:40:31 · 1113 阅读 · 0 评论 -
HDU 4400 Mines
题目大意是二维坐标系上有一些炸弹,每个炸弹有x,y坐标和爆炸后波及的范围r,这个r指的是跟自己曼哈顿距离r以内的点就类似于扫雷那样,一个炸弹爆炸可能引起一片一片的炸弹炸出去然后有一些询问,问点燃某个炸弹后会有多少个炸弹爆炸 已经炸过的就不算了应该不难想到是用BFS去找临近的点我的做法是把横坐标离散化,然后每个横坐标建立一个vector,把相应的y都塞进去然后每次询问,就原创 2012-09-22 21:49:46 · 2798 阅读 · 1 评论 -
HDU 3758 Factorial Simplification 数论
这题就考一个知识点,就是求阶乘中某个素数因子的个数题意不再说了具体思路就是把分子的所有素因子以及其个数存起来。分母也是。然后看对应的素因子的个数分子是否都不小于分母就可以判断是不是整数如果是整数进行下一步每次二分寻找能整除的最大阶乘的数。直到找不到大于1的数用二分是因为阶乘的素因子个数一定是非递减的。二分的上下界多大呢。下界是2,题目给定了上界就不好说了。原创 2012-09-14 00:42:51 · 1260 阅读 · 0 评论 -
HDU 4038 Stone
哎,当时比赛的时候各种胡思乱想,竟然把这道题给A了。这题的题意就是给一序列的数,有两种操作,一种是把序列中某个数的值加1,要么在序列中增添一个数为1,然后给出操作数,最后要求这些数的乘积最大,求出这个乘积。做这个题要考虑的细节很多,首先要把负数的个数求出,如果为奇数,那么要把最大的那个负数尽量加到0,就相当于转化为偶数的情况了,然后负数就不用在管了,这时候,序列中如果有0的话,很显然他们相原创 2011-09-13 17:30:13 · 1394 阅读 · 0 评论 -
HDU 1595 find the longest of the shortest
这道题的题意就是有一个稠密图,一个人要从1走到N点,中间可能某一条路会断掉,求最短路最坏的情况, 也就是断掉某条路时,最短路径最长。这道题,不难想到枚举删边求最短路,这种方法下,用SPFA无疑是最好的选择。首先,用SPFA求出初始状态下的最短路,然后记录下最短路的路径,再枚举路径中的每条路,对每条路删除后求一次最短路,取最大值就行了。那么为什么只用枚举最短路上的这些路呢,很显而易见的是,如原创 2011-11-07 09:22:03 · 1856 阅读 · 3 评论 -
HDU 2426 Interesting Housing Problem 最小费用最大流 or KM算法
这道题貌似是08年杭州网络赛的题目, 看完题后就发现是个最优匹配问题,用KM或者最小费用最大流做, 就找了个最小费用最大流的模板,改了一下,就能过了、建图还是比较好想的,建立一个超级源点,一个超级汇点,然后源点与学生连边,流量限制为1,费用为0,汇点与房间连边,流量限制为1, 费用为0, 然后学生与房间之间的边,流量限制是1,费用就是题目给的喜好值了, 注意,每次加边,都要加一个相应的反向边,原创 2011-11-13 15:39:48 · 1091 阅读 · 0 评论 -
POJ 3145 HDU 3303 Harmony Forever 线段树 + 鸽巢定理
大意就是对一个集合,有两种操作,一个是将某个元素加入集合中,一个是问当前集合中mod y 最小的数,如果有多个,输出最近加入的那个元素,当然题目要求的是输出他们加入集合的时间是什么。题目的数据范围一看就是线段树类型的。然后对每个y,由鸽巢定理,y+1个数中必然存在mod y相同的数,那么分为多个区间进行查询,即[0, y - 1] [y , 2 * y - 1]…… 然后取最优解即原创 2012-03-22 16:11:21 · 2394 阅读 · 0 评论 -
HDU 3938 Portal 并查集
给一个无向图,求有多少个点对,使得两点间的路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间所有的路径中的最大边的最小值。 当然题目上不是这么写的。它问的是有多少种路径,这里就比较模糊了,到底两个路径怎样才算是两种路径呢,这时候重新看题,可以发现,如果理解为路径中经过的点不同的话,题目中给的所谓两点间的花费这个定义就没有意义了,所以就可以猜测,题目要求的是有多少个点对了。原创 2012-04-09 00:05:18 · 1789 阅读 · 0 评论 -
HDU 1255 覆盖的面积 线段树 扫描线
还是先离散化坐标,然后用线段树扫描线其中sum代表被覆盖过一次的长度,sum2代表被覆盖过2次及以上的长度。然后注意pushup操作比较麻烦。/*ID: sdj22251PROG: subsetLANG: C++*/#include #include #include #include #include #include #include #include #原创 2012-03-20 13:05:26 · 786 阅读 · 0 评论 -
HDU 3397 Sequence operation 线段树(区间合并)
比较麻烦的一道题,各种操作线段树中存储的信息有,覆盖标记,异或标记,0和1的从左到右连续长度,从右到左连续长度,区间最大连续长度/*ID: sdj22251PROG: subsetLANG: C++*/#include #include #include #include #include #include #include #include #inc原创 2012-03-06 11:47:29 · 982 阅读 · 0 评论 -
HDU 3564 Another LIS 线段树+最长上升子序列
排队问题是线段树中很常见的题型。题目大意就是不断的向一个序列插入数据,插入的位置为当前序列的第某个位置,每次插入后都要求当前序列的最长上升子序列的长度。 /*ID: sdj22251PROG: subsetLANG: C++*/#include #include #include #include #include #include #include #原创 2012-03-14 22:03:34 · 1280 阅读 · 0 评论 -
HDU 2871 Memory Control 线段树(区间合并)+二分查找+vector的常用方法
这道题给人的感觉就是恶心人。刚开始完全不懂怎么找含有x的区间,后来看别人都说用vector,然后用之,发现很好用啊,支持插入和擦除操作,我原来竟然不知道还有这些功能.vector中的insert函数iterator insert( iterator loc, const TYPE &val ); void insert( iterator loc, size_type num, c原创 2012-03-06 18:18:07 · 878 阅读 · 0 评论 -
POJ 2892 hdu 1540 Tunnel Warfare 线段树 (区间合并)
这个题目的大意就是,求某个点所在的最长连续区间区间合并此类题目的通常做法都是开3个变量,区间最大值,从左往右的连续区间长度,从右往左的连续区间长度。然后更新的时候更新到点就行了。查询的时候,只需要知道,某个点所在的连续区间,一定是由某个线段的左儿子的从右往左的连续区间和右儿子的从左往右的连续区间构成的/*ID: sdj22251PROG: subsetLANG:原创 2012-03-06 00:27:54 · 983 阅读 · 0 评论 -
线段树几题 --------- 成段更新
线段树的成段更新,需要用到延迟标记就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候否则就会退化到O(n)的复杂度1.hdu 1698 Just a Hook大意是每次把某一段所有数的值改变成某个值,最后求总和。#include #include #include #include #include #include原创 2011-10-29 11:32:00 · 970 阅读 · 0 评论 -
线段树水题几枚
最近接触了一下线段树,按理来说这个半年前就该看了,实际上自己却总想刷水题而躲避难题,不过,该来的还是要来的,既然选择了数据结构,就让各种树来的猛烈些吧。以下为最初级的线段树,只更新点,没有delay操作1.HDU 1166 敌兵布阵这道题用线段树或者树状数组都可以做,HDU上的数据貌似很弱,模拟竟然都能过首先是线段树版 ,线段树所带信息为当前区间所有点的值的和原创 2011-10-15 21:57:29 · 2017 阅读 · 0 评论 -
HDU 3641 Treasure Hunting
这道题貌似是10年杭州网络赛的题,乍一看挺唬人的,数据范围那么大。实际上就是个简单数论,看完题就想到解法了,只不过细节上要注意很多。下面是详细解法:a1^b1*a2^b2*a3^b3…*an^bn ,对于这个序列,我们把每个a都质因子分解,然后整个序列中质因子的种类和个数就都知道了,然后就要求X了,对于某个X的阶乘中含有的某个质因子的个数,这个有个很简单的结论,也很好理解,log(n)时间原创 2011-10-31 11:48:47 · 1117 阅读 · 0 评论