HDU
文章平均质量分 74
asdfgh0308
这个作者很懒,什么都没留下…
展开
-
HDU4560 我是歌手 网络流
HDU4560 我是歌手二分+网络流。这是金山复赛1的第四题。最近把我是歌手小看了一些,唱功果然才是歌手的必备技能啊。(还有观众好假啊。。)扯远了。这么个题目,看了一眼就觉得是网络流。很脑抽的是比赛的时候居然没有做出来。有一个很需要思考的地方:如果唱了n场,而每种流派被演唱的次数不超过n次,必然存在一种安排方法使得每场比赛不会有相同的流派。原创 2013-06-03 13:29:31 · 1216 阅读 · 0 评论 -
hdu4468 Spy,KMP
给一个串s,找最小的一个串t,使得原串是这个最小串的前缀+前缀+..(很多很多的前缀)+这个最小串构成。很难思考的题目。可以想到一种思路:能用短的匹配,就不用长的。利用KMP,当不能匹配的时候,就从上一个匹配完成的位置开始把剩下的那段加到t中。为什么要找上次匹配完成的位置last呢?因为这样做能保证t是一个最短的能满足构成s[0..i]的串。由于最后需要一个原创 2014-11-13 15:21:54 · 652 阅读 · 0 评论 -
hdu4600 Harvest Moon,模拟
hdu4600 Harvest Moon,模拟自从学了很多莫名其妙、不明所以、看似牛逼比赛却很难想到、想到了又很难打出来、打出来又很难调对的算法之后。。。我发现我越来越不会做模拟题了。这个题……就是注意细节吧。主要有几个:1.统计一下几种铺的方式各有几个,就可以1000D*1000A暴力模拟了。注意,除了3*3的从左上开始铺满之外,先铺右下角的那种比较优。2.如果数据不原创 2014-10-29 09:16:22 · 569 阅读 · 0 评论 -
hdu4606 Occupy Citie 简单计算几何,最小路径覆盖
堆砌算法的题。就是长。先用线段相交处理两点之间是否有路径,再floyd求出两点间最短路。注意到占领一个城市之后,补充食物到满,那么只要考虑路径上最长的边最短即可。最大的最小,考虑二分。二分答案mid,小于等于mid的边可行。这样转化为判定用p个人是否能将路径覆盖。也就是最小路径覆盖小于等于p,这是二分图匹配的简单应用。拆点做匹配即可。记得连边只能向指令顺序靠后的原创 2014-10-29 11:10:23 · 598 阅读 · 0 评论 -
hdu4605 Magic Ball Game,函数式线段树
hdu4605 Magic Ball Game求某点到根的路径的blabla....一看就是函数式数据结构。把点的权值推到节点下面的边上。离散化权值后,以权值建函数式线段树。用函数式线段树,树保存两个值,路径边上连接左右儿子的边为该权值的分别有几个。某条路径上的值就是两个节点对应函数式线段树的值相减。离散化时加入一个0,一个inf权值,防止-1,+1越界原创 2014-10-28 22:54:32 · 627 阅读 · 0 评论 -
hdu4611 Balls Rearrangement,模拟
题意:求sum{abs(i%a-i%b)|i=0..n-1},1这题不难,但是我不会。看了网上的题解,居然是根据lcm暴力模拟。从0..n-1模拟,找到下一个最近%a=0或%b=0的断点,计算这一段的变化值。由于这一段差值是一样的,可以一次计算一段的总差值。为什么暴力可行呢。似乎没有人给出合理解释。我来研究一下。n直接取最大值1000000000。那么当原创 2014-10-30 19:41:36 · 604 阅读 · 0 评论 -
hdu4787 GRE Words Revenge,AC自动机,平方分割
hdu4787 GRE Words Revenge,AC自动机,乱搞,,题意,给一些串(单词)学习,再给一些串(文章),要找出已学习的串中不同的串在该串中出现的次数总和。强制在线。如果一次将所有单词学完,再问这些文章中单词的出现次数,这就是AC自动机的裸题了。但是这里要求边学习边询问。ac自动机的Build过程将会成为复杂度瓶颈,最差O(n^2)。看时限比较宽松,这题需原创 2014-10-03 21:09:58 · 1123 阅读 · 0 评论 -
hdu4916 Count on the path,树dp
水题搞了半天也是醉了。以1号节点为根,如果路径不经过根就是1.如果经过根,拆为两条,找这两颗子树中不在路径的最小值和另外一些子树的最小值。大概过程就是dfs(),找每个点往下的最小值。dfs3(),找每个点从上往下不在路径上的最小值。dfs2()找每个点所在的子树。很丑陋的代码,但是明天要比赛,懒得改了!#pragma comment(linker, "/STACK:102原创 2014-11-15 20:17:57 · 562 阅读 · 0 评论 -
hdu4601 Letter Tree,trie,bfs,dfs,二分,rmq
真的是很有意思的题。因为有重复的边,我想了很多贪心搞法都错了。最后还是看了标解。trie+bfs+dfs+二分+rmq。OMG最重要的还是几点吧:1.通过在trie上dfs/bfs可以知道某个节点的hash值大小,因为有mod,直接比较值是没法比较大小的。2.bfs可以将树上同一深度的点放在一个连续区间,而dfs可以求出子树区间,结合就能找到子树中某个深度的最值。注原创 2014-11-01 21:05:24 · 543 阅读 · 0 评论 -
hdu4812 D Tree,平衡树,启发式合并
今天模拟2013南京赛,两个半小时做完5题开始梦游。每次都出不了难题有木有!都是水题的场手速又拼不过有木有!hdu4812 D Tree,南京的k题。每个点有一个权值,问是否存在一条路径,路径所有点的权值乘积模1e6+3等于k。这个题,大家基本都是用点分治过的,复杂度O(nlogn)。这里介绍一个有趣的解法,也是一个我感觉很有用的思想:启发式合并。先说说启发原创 2014-10-05 00:48:03 · 1615 阅读 · 0 评论 -
hdu4057 Rescue the Rabbit,AC自动机,状态压缩dp
hdu4057 Rescue the Rabbit,AC自动机,状态压缩dp题意:给n(一个串只能被计算一次权值。将这些串建trie树,那么树节点不会超过1000个。然后状态压缩dp,状态有2^10=1024种,节点数1000个,每次转移有四种,共有100次转移,转移用AC自动机优化就是O(1)。因此复杂度就是O(1000*1024*100*4)。实际会更小一些,因为树原创 2014-10-15 22:41:07 · 556 阅读 · 0 评论 -
hdu4303 Hourai Jeweled 树形dp,统计
hdu4303 树形dp,统计给一个树,边有颜色,点有权值。满足某种条件的路径是好的路径,求(好的路径的(路径上的点的权值和)的总和)。这种条件就是这个路径上没有两个相邻边同色。关键就是算一个点的权值要被计算几次。其实情况就两种,不要重复计算就可以。情况1.包含(u,fa)这条边的路径。情况2.不经过fa,而包含(u,v)这条边的路径。这里要注意,如果有多个儿子原创 2014-10-17 15:40:38 · 586 阅读 · 0 评论 -
hdu4693 Huge String,高精度,dp
hdu4693 Huge String,高精度,dp给一些字母的替换规则,给一个s串。问替换操作n次后,[k,k+m-1]位置的子串是什么。dp预处理大写字母操作i次的长度。然后dfs找那段的字母就可以了。k明摆的是高精度了。贴板吧。#include#include#include#includeusing namespace std;#defin原创 2014-11-03 23:50:11 · 676 阅读 · 0 评论 -
hdu 5091 Beam Cannon,离散化,暴力
给一些点(2014上海邀请赛的题。正解是线段树。为什么不用?因为我傻。用的O(n^2)暴力水过去的。由于水的姿势比较好还是记录一下。离散化后将点加入每个点加入行的vector中,然后枚举矩形,这样每次挪动矩形只要找到该行的一个范围[sx[k],ex[k]),而这个范围是递增的,所以平摊复杂度是O(n^2)。要注意带注释的两句话,删掉可能会超时。#in原创 2014-11-04 00:06:18 · 730 阅读 · 0 评论 -
hdu4674 Trip Advisor,双连通分量,LCA
hdu4674 Trip Advisor,双连通分量,lca这鸟题真是写吐了。简单来说就是缩圈后成为一个树,然后就变成询问树上某条路径path[a,b]是否包含某点c。这里我想屎了,用的主席树,空间卡到死各种改。其实只要用lca搞一下就ok。但是,这里没那么简单,不仅要在缩点后的路径上,还得求出路径在a、b、c、lca块的出、入点。挺复杂的判断才能判断是否能有一个不原创 2014-11-06 20:44:02 · 616 阅读 · 0 评论 -
hdu 4670 Cube number on a tree,平衡树,启发式合并
又找到一个启发式合并的练手题。还不太清楚这种算法的可以先看看这篇。这题问的是有多少个路径满足路径的乘积是立方数。其实分解质因数后,用一个long long保存状态,这样就变成了多少条路径满足路径的状态和等于0。在树的每个节点建一个平衡树,自下而上合并时统计,很容易得到这个结果。貌似在相同复杂度的情况下,启发式合并的效果都要比点分治的效果要好(常数要小)。不过调试原创 2014-11-07 01:25:18 · 865 阅读 · 0 评论 -
hdu 4680 splay,启发式合并
hdu 4680 splay,启发式合并这个题是按照权值建树,一般的区间树操作可能得修改一下。几个操作也很有想法:1.合并两个集合。这里用到启发式合并的方式,也就是把小的集合一个个插到大的上,可以证明合并操作不会超过O(nlogn)2.拔、插。这是splay的基础不用说了。3.改。因为是权值建树,不能直接改。先拔出来改了再插回去。4.这个很巧妙,取最多的点最优的方式原创 2014-11-06 21:17:50 · 1486 阅读 · 0 评论 -
hdu4604 Deque,树状数组,最长上升/下降子序列
hdu 4604 Deque,树状数组,最长上升/下降子序列正在补习13多校题。给你一组数,按顺序取出来,再给一个deque,按顺序把这组数取出来插到deque中,可以插头和尾,也可以直接丢掉。要求deque中元素非降。问deque中元素最多有多少个。只要枚举一个中心点,然后就是找这个点之后的大于这个元素的最长上升序列和小于这个元素的下降序列的长度和+1,更新答案即原创 2014-10-27 23:05:45 · 904 阅读 · 0 评论 -
hdu 4729 An Easy Problem for Elfness,函数式线段树
hdu 4729 An Easy Problem for Elfness,函数式线段树13年成都网赛的题。主要是问一个树上的某两个点间的路径,你可以对某些边增加一些流量,最多这个路径上能流过多少流量。题目意思比较复杂(废话多),最大流量可以分成这几种情况:1、增加一条边,剩下的费用用来增加这条边的流量,加上本来两点间的流量。2、所有的费用用来建新边,加上本来的流量。3、原创 2014-10-07 16:39:02 · 720 阅读 · 0 评论 -
hdu4641 K-string,后缀自动机,并查集
做完这题还是有点小高兴的。。网上题解都是O(n^2)水的。简单介绍一下我想滴比标程还短还快的O(n+T(并查集))的做法。原创 2014-11-10 02:02:56 · 2167 阅读 · 0 评论 -
hdu1431素数回文
纠结了这么久,追求一些莫名其妙的东西,似乎还不一定能得到。还是回到这个充实的地方,重新开始。做点水题热身。hdu1431 找出一个范围内的回文素数。观察数据范围,5到99999999之间。回文数的通常做法,暴力枚举回文的一半,构造出另一半。这样我们只要枚举1到9999,来构造回文数。构造出数后,加上素数判定,预处理素数,暴力枚举判定,10000以内的素数原创 2014-04-05 10:15:32 · 679 阅读 · 0 评论 -
ural1297 Palindrome,hdu 3068 最长回文,Manacher
在昨天多校的凸包被卡之后,我已经发现用poj测模板是作死的最好方式。所以又水了两道。ural 1297. Palindrome这里要求输出回文串。理解一下模板len[i]的含义。当i是奇数,len[i]表示的是i/2位置为中心的奇数长度回文串的回文串半长((回文串长度+1)/2);当i是偶数,len[i]表示的是i/2、i/2+1为中心的偶数长度回文串的回文串半长。原创 2014-08-15 14:35:58 · 559 阅读 · 0 评论 -
hdu3446 daizhenyang's chess,一般图匹配
hdu3446 daizhenyang's chess一般图匹配问题。将所有'.'的点之间可到达的建边。求最大匹配。最后将K点加入,找增广路。如果找到增广路,先手胜,否则后手胜。证明比较容易(如果找到增广路,则先手可以找到一个包含偶数个点也就是奇数个边的路径,这样最后一次走的还是先手)。#include#include#include#include原创 2014-08-20 16:42:21 · 791 阅读 · 0 评论 -
poj3974 Palindrome,回文串,Manacher
最近在暴搞字符串。poj3974 Palindrome。数据有点变态的大,10^6,dc3MLE,rmqTLE。所以Manacher算法O(n)空间和时间求解回文串长还是很有用的嘛。贴个模板。来自交大书,不用预处理加什么‘#’的,比较方便。记得len[]要开两倍字符串长。原创 2014-08-15 13:27:11 · 599 阅读 · 0 评论 -
2014多校5、6,hdu4913,hdu4920,hdu4921,hdu4923题解
多校5:1003,hdu4913:又见线段树按照a排序并离散化,作为线段树中的位置。按照b排序按照顺序插入线段树。这种两个关键值的问题经常这样处理。线段树维护两个值,对于某个元素i插入时,需要:1.对于已插入的元素满足aj2.对于满足aj>ai的元素,用另一个值记录,每个元素插入时插入2^n1*2^ai,当一个元素插入时,后面的值都*2。当i插入时,求总和*3^bi即可。原创 2014-08-08 21:29:50 · 775 阅读 · 0 评论 -
2014多校3,hdu4888,hdu4893题解
真是已经老得不能再老。荒废了一年多,又在大四的暑假回到了集训队。 本人真是一个自制能力极差的人,没有压迫就没有自觉性。正好,在滚滚的未完成题目和被低年级小朋友虐杀的压力下加紧训练吧。 连做了几场多校,已被各种吊打。心态已经好到不能再好。现在补一下几个做过的题目的简要题解。 多校二:1002,hdu4888:这个题是个经典的网络流模型,只要每行和每列分别设为一原创 2014-08-08 15:40:14 · 851 阅读 · 0 评论 -
hdu5008 Boring String Problem,2014西安网络赛B题,后缀数组,RMQ
hdu5008 Boring String Problem295分钟惊险ac。问一个串的不重复连续子串中,字典序第k小的子串是哪个。如果存在多个同样的子串,要求输出l最小的那个。显然,通过后缀数组可以求出所有的不同子串数。对于某个点l,后缀长度减去height的值就是该点为左端点所能贡献的不同子串数量。对于后缀排名靠前的点,以这个点为起始的所有子串都会比排名靠后原创 2014-09-14 20:17:00 · 847 阅读 · 0 评论 -
2014多校4,hdu4897,hdu4898,hdu4902,hdu4906题解
多校4:丽洁大神的思维果然不是一般人能懂。连看个标程都费劲得死。所以人家能IOI第一呢。 本场又被吊打,不过结果是其它队做出来的1009是个错题…… 好吧来看题目。1001,hdu4897:树链剖分!为了做这题我才学的!CLJ的代码风格太过诡异而不能看懂,我参照题解思考了一个算法:线段树上保存两种标记,标记1是用于操作1,当翻转某条路径时,将该路径的标记1反转,原创 2014-08-08 16:49:58 · 1101 阅读 · 0 评论 -
hdu4973 A simple simulation problem. 线段树
hdu4973 A simple simulation problem.每种type的细胞为一个点建线段树,翻倍时找到相应区间翻倍即可。注意头尾特殊处理。真的是很simple的线段树题目。需要完成单点加,区间乘,询问区间最大值,询问区间和几个操作。就是这么简单的题目被我写了将近4小时。没什么好说的。代码中的node是没有必要的,记录一个最大值即可,因为不需要知道原创 2014-08-22 11:54:20 · 573 阅读 · 0 评论 -
hdu 4967 Handling the Past 线段树,最右正值区间
最后一场多校,又被吊打。最近学了一些莫名其妙的算法,然而最简单的线段树都写不好。(政神1小时秒杀的题目我改了4小时。)还是静下心来,学好用好每一种算法。hdu 4967 Handling the Past 看了题解。很巧妙的做法。利用线段树记录一个值rmax=max{左儿子的rmax+右儿子的sum,右儿子的rmax}。通过这个值可以快速找到 总和为正值的最右位置。原创 2014-08-22 11:48:11 · 1300 阅读 · 0 评论 -
hdu4979 A simple math problem.Dancing Links,打表
hdu4979 A simple math problem.题意是,给你n、m、r,问1..n中选m个数的集合至少要选多少个,才能包含所有1..n中选r个数的集合。(不重复)题解说这个题目没有多项式解法。只能用搜索。然后建议了Dancing links。然后标程就给了一个表有木有!这种题你也敢出出来,逗我呢啊。然后我还是试了下DLX的解法。先回顾一下DLX:首先原创 2014-08-23 15:58:46 · 637 阅读 · 0 评论 -
hdu4937 Lucky Number,数论
hdu4937 Lucky Number比较简单的数论题。把n分别减去3 4 5 6,剩下的为tn。求出tn的所有约数,尝试所有约数是否满足基的条件即可。这样复杂度只有O(sqrt(n))。原创 2014-08-13 15:02:32 · 541 阅读 · 0 评论 -
hdu4819 Mosaic,二维线段树
hdu4819 Mosaic13年长春regional。二维线段树。需要变更某个点,询问某个矩形的最大最小值。在二维线段树里这只算个裸题。这里只说一点,为了保持O(nlogn)的复杂度查询在更新点的时候,需要将所有包含该点的区间的最大最小值都变更。假设n=3,当你修改点(2,3)你不仅要修改x=(2,2)的y轴线段树,也要修改x=(1,2)对应的y轴线段树。这里原创 2014-08-28 10:32:01 · 588 阅读 · 0 评论 -
hdu 4816,Bathysphere,三分
今天模拟了去年长春Regional。我们队居然做到了五题,20名左右的样子。可惜最后一个小时开两道题都没做出来。这题是其中之一:给你n个点,相邻点连线,求一段长d区间的高度期望最大值。算法如下:高度是就是面积除以区间长度。这样就是求面积的最大值。面积的二阶导数是斜率,定值。因此可用三分。枚举所有给定的点作为左端点或右端点,在到下一个端点之间一段区间内原创 2014-08-27 23:26:58 · 1146 阅读 · 0 评论 -
hdu 4052 Adding New Machine,set
hdu4052 Adding New Machine,set比较老的题。给一个矩形和一些已经覆盖了的小矩形,问在剩余的空格上放一个长为m的条有多少种放法。可以用线段树化为矩形面积并搞。这里练习一下平衡树的做法,set也比较短。把矩形变为入和出两个事件,根据这些事件计算某行有多少空格,就能计算横着放有多少种放法。然后横竖各做一遍。这里利用set可以找到插入线段的两端第一个非空原创 2014-10-15 22:19:41 · 581 阅读 · 0 评论 -
hdu4348 To the moon,函数式线段树
hdu4348 To the moon,函数式线段树修改某个区间,求某个区间的和,求某个区间过去某个时间的和,回到过去某个时间。这是函数式线段树的裸题了。修改区间可以将区间的变化量保存在对应区间的节点上,这样就不用lazy了。lazy还会导致更多的空间消耗。由于卡空间,我只好把线段树写成了不保存左右端点的形式(不符合我风格啊)。原创 2014-10-07 11:35:30 · 812 阅读 · 0 评论 -
hdu1754 I Hate It,线段树
简单的线段树,求区间最大值和修改某个点的值。#include#include#includeusing namespace std;#define N 200100#define ls (p<<1)#define rs (p<<1|1)#define mid(p) (t[p].l+t[p].r>>1)int v[N];struct segment原创 2015-01-06 11:21:44 · 638 阅读 · 0 评论