HDU
文章平均质量分 78
calabash_boy
退役
展开
-
HDU 5992: KD-Tree
题意:给出N个酒店,每个酒店用平面上一个整点表示,每个酒店有一个价格C。现在有若干次询问,每次询问(x,y,c),求出距离(x,y)最近的且价格不超过C的酒店。题解:这题要是在比赛上,绝对直接按照C排序,然后离线暴力。但是正解也是要学习的,这个题的正解是kd-Tree,就是所谓的多维度二叉搜索树,众所周知,二叉搜索树有很多种,主要都在贯彻一个思想:降低树的高度,提高搜索效率。那么kd-原创 2017-10-23 22:16:19 · 609 阅读 · 1 评论 -
HDU 3065 2017 Multi-University Training Contest - Team 1 1003 Corlorful Tree:计数+树上分块
题意:给定一棵树(n题解:换一种方式求总和,把每种颜色的贡献单独计算。再换一个角度,先假定所有的n*(n-1)/2条道路的value都是最大值n,然后对于1..n每种颜色,把不该算的道路数量找出来,在总答案上剪掉即可。如果某种颜色未出现过,那么该颜色在所有道路上都被非法计算了一次,答案减掉n*(n-1)/2如果某种颜色出现果过,那么非法统计的答案是:没有出现过该颜色的道路数量。想要找到原创 2017-07-26 22:32:16 · 422 阅读 · 0 评论 -
HDU 6052 2017 Multi-University Training Contest - Team 2 1008 To My Boyfriend:计数问题
题意:给出一个n*m(1题解:期望=所有子矩阵的value总和/子矩阵个数。首先解决一个zz的问题:子矩阵有多少个,二重循环枚举子矩形右下角的点(i,j),那么子矩阵左上角的点一定在(0,0)-(i,j)这个矩阵里,所以有i*j种。如果你学过小学数学,当然,子矩阵总共有n*(n+1)*m*(m+1)/4=[n*(n+1)/2]*[m*(m+1)/2]=C(n+1,2)*C(m+1,2)种。原创 2017-07-28 18:15:29 · 2769 阅读 · 9 评论 -
HDU 6058 2017 Multi-University Training Contest - Team 3 1003 :Kanade's sum:简单计数问题
题意:给定一个n(题解:又是一道计数题,那么这个题一个比较好的思路是:枚举全排列中的每一个 a[ i ],让他作为value的答案,求出这样的序列有num个,那么a[ i ] 贡献的答案就是a[ i ] * num。num的求法可以分类讨论:让左边有x个比a[ i ]大的数字,右边有k-1-x个。那么我们需要枚举每一个a[ i ]这就有了n的复杂度。那么我们必须对于给定的a[ i ],快速地求原创 2017-08-02 14:01:38 · 557 阅读 · 0 评论 -
HDU 6078 2017 Multi-University Training Contest - Team 4 1012 Wavel Sequence:线段树+DP
写在前边:如果大佬发现了我姿势有问题,请帮我提出建议,十分感谢。题意:给出一个有n(x3=1)使得每个a_fi = b_gi,同时满足a_f1,a_f2,a_f3……a_fk为波浪序列。求不同的fg映射有多少种选取方式。题解:稍微翻译一下题意:a,b中分别从前向后选取k个数字。然后相对应的 a 中选择的每个位置的数字要和 b 中选择的对应位次的数字相同。(当然如果a数组出现过x,而b没原创 2017-08-03 18:31:52 · 1912 阅读 · 0 评论 -
HDU 6073 Multi-University Training Contest - Team 4 1007 :Matching In Multiplication:拓扑排序+思维
题意:给出一个二部图,U、V分别是二部图的两个点集,其中,U中每个点会有两条边连到V中两个不同的点。完美匹配定义为:所有点都成功匹配。完美匹配的权值定义为:匹配的边集所有边长度的乘积。图的权值定义为:所有不同方案的完美匹配的权值的和。给出的图满足一定存在完美匹配。题解:这个题开始拿到不知道如何入手,只知道U中每个点出度都是2,并且U、V都有n个点,那么很显然V、U都有2n的度。考虑匹配:U中每原创 2017-08-07 18:52:58 · 288 阅读 · 0 评论 -
HDU 6085 Multi-University Training Contest - Team 5 1001:压位大法好
写在前边:这里所谓的压位,就是把状态只有0/1两种的值,干脆都不用bool表示了,直接表示成二进制位,这样一个LL可以表示多达64个数据,而一个时钟周期内,LL可以直接处理掉64个数据,而不用像之前的bool运算需要进行64次=64个时钟周期,因此可以把常数变成64分之一,可以优雅地进行暴力。题意:给出长度为 n 的序列 A ,长度为 m 的序列 B ,保证A中任何两个数字不相同,B也是。原创 2017-08-09 15:38:34 · 286 阅读 · 0 评论 -
HDU 2222 ACAM模板(AC自动机)
这里找到了两篇很nice的Trie树(作者Hackbuteer1)以及AC自动机(作者niushuai666)入门详解。博主写的可以说是非常用心了,一看就懂。题意:给出N(题解:AC自动机裸题。所谓AC自动机就是Trie树加上了KMP的fail指针,而且是多模式的fail指针,意思就是说Trie图是有相同前缀的两个单词会有相同的一段root出发的路径,这个fail指针不再是KMP里某一原创 2017-08-10 00:33:51 · 300 阅读 · 0 评论 -
HDU 6096:妙用AC自动机(666)
题意:给出一个n(题解:官方题解的意思是:弄两个Trie树,然后正串的Trie树得到他下边所有终止节点。然后反串的Trie树上就每一个点都开线段树统计答案。而且必须是动态开点线段树,要不然内存炸的很恐怖。某位大佬讲给我的题解(666!666!666!):首先必须离线处理。先看询问:给出 s 和 t 那么我们把他组合成 t#s ,也就是表示成 (后缀)(特殊字符)(前缀)的形原创 2017-08-11 18:01:58 · 814 阅读 · 0 评论 -
HDU 6138 2017多校第八场1006 Fleet of the Eternal Throne :AC自动机
题意:给出n(题解:对n个串造出 自动AC机 ,这里的AC机不需要维护单词的结束点 需要维护一个每个节点到根的距离,也就是前缀的长度。然后用x跑一遍AC机,在所有匹配成功的结束节点上记上一个标记(直接记成询问次数就行了:第一次询问flag记成1,第二次记成2,这样保证每次的flag都不一样就不用清空标记了),然后这些标记点的意思就是:这个前缀是n个串中某个的前缀,且这个前缀是串x的字串。然后原创 2017-08-17 18:39:08 · 1686 阅读 · 1 评论 -
HDU 6166 2017多校 Team09 1006:Dijkstra顶点子集最短路径
宕掉了好几天。。。。。来发一个水题的题解题意:给出一个有向图(n,m题解:回想最短路算法,首先排除掉N^3的的那个,然后剩下SPFA和Dijkstra跑多次的复杂度比较能接受,这两个其实是差不多的东西,由于边权都是正的,就上Dijkstra吧。基础版的Dijkstra是单源多汇的,但是本题是多源多汇,但是Dij他是单源的……等等。。。Dij也可以多源呀,只要开一个超源0,用长度为0原创 2017-08-22 21:03:46 · 2329 阅读 · 0 评论 -
HDU 6191 2017广西邀请赛Query on A Tree:可持久化01字典树(区间抑或最大值查询)
题意:给出一棵n(题解:基本上是个板子题吧。直接讲方法了。。直接上DFS序+可持久化01字典树就行了。可持久化01字典树可以用32步查得一个区间内某个数字和val抑或得到的最大答案,那么DFS序一下就可以把子树搞成区间。然后完美解决。可持久化01字典树:可以理解成在字典树的每个节点上弄了个前缀和一样的东西吧,重点在空间复用。每个字典树节点增加sum域,记录前边数字中有多少个数字走到原创 2017-09-02 23:48:25 · 1982 阅读 · 0 评论 -
HDU 6194 string string string :后缀数组+单调队列 | 后缀自动机
题意:给出一个字符串,求出出现了恰好k次的子串的个数。题解:恰好k次 = 至少k次 - 至少k+1次。答案转化为求至少出现k次的子串个数统计。构造好后缀数组以及很重要的Height数组之后。用一个k-1的窗子去滑动。窗子里边放着k-1个Height值(Height[ i+1 ],Height[ i+2 ],……,Height[ i+k ]),这样k-1个值就联系了k个后缀(SA[ i ],SA原创 2017-09-13 02:25:08 · 548 阅读 · 0 评论 -
HDU3948:后缀数组+马拉车(本质不同回文子串统计)
题意:给出一个字符串,求其 本质不同的 回文子串的个数。如果有小伙伴WA了无数次,请尝试模拟一下aabaa这个串,答案应该是5。(本菜鸡就WA了一晚上)题解:回文子串可以考虑先来个O(n)的马拉车预处理,这样每个回文子串长度必然是计数,那么我们可以统计本质不同的(正中间的字符+右半边串)回文子串个数。然后可以考虑用后缀自动机统计答案。这道题的关键的关键在于去重的处理。去重要原创 2017-09-15 04:08:49 · 2226 阅读 · 1 评论 -
HDU 4622 本质不同的子串个数:后缀自动机
题意:给出一个串,每次求一个子串[ l , r ]。问这个串中,本质不同的子串个数,多组询问,数据小。题解:记住SAM是ON的。所以直接对每个[ l , r ]建SAM,然后建完就出答案。时间足够用。模板题为什么要写博客呢。。。。因为复用自动机的话。。要清空呀。。。。Code:#includeusing namespace std;const int maxn原创 2017-09-21 23:41:56 · 2995 阅读 · 0 评论 -
HDU 4641 至少出现K次本质不同子串数:后缀自动机
题意:先给出一个串,然后有若干操作。操作1:在结尾续上一个新字符。操作2:查询至少出现了K次的,本质不同的子串个数。题解:SAM裸题,插入一个新的字符之后,就暴力在parent上转移++,但是也不能那么暴力,我们知道parent链上的num是单调增的,当遇到一个num>=k的点就不需要再继续走了,因为前边的肯定统计到答案里边了。Code:#includeusing原创 2017-09-22 00:19:37 · 1133 阅读 · 0 评论 -
HDU 5917:Ramsey定理
题意:给出一个n个点的图(最多50),定义合法的顶点集合为:至少存在一个子集(size>=3)且这个子集是一个团或者独立集。求合法集合的个数。题解:现场赛怕是群脸懵逼吧。。。有一个Ramsey定理,说的是,世界上任选6个人,必然存在至少三个人相互认识或者相互不认识。也就是说给一个大于等于6个点的图,他的最大团或者最大独立集必然大于等于3那么问题很显然了,6以及6以上的直接统计345原创 2017-09-30 00:25:24 · 489 阅读 · 0 评论 -
HDU 5977 & 2016 ICPC 大连 G:点分治
题意:给出一棵树(n题解:先讲讲7的那个退化版的做法:7个颜色可以用7位压起来表示状态,2^7-1=127,因此可以用一个空间复杂度O(n*2^k)时间复杂度为O(n*2^k)的树形DP或者说dfs搞定,属于简单题。再来看看k=10的版本,由于k=10,n*2^k的时间或者空间都无法接受。本题属于路径统计问题,是比较明显的点分治模型,那么在点分治的时候,我们可以从当前选定的原创 2017-10-19 21:14:51 · 426 阅读 · 0 评论 -
HDU 3068 2017 Multi-University Training Contest - Team 1 1006 Fuction: 循环节+最后一步
题意:给出一个0..n-1的全排列a,给出一个0..m-1的全排列b,现在要求计算函数F(定义域0..n-1 值域0..m-1)的个数,使得对所有的0..n-1的 i 都有 F(i)=b(F(ai))题解:现在已知置换a和b,我们考虑一下这个长相奇特的限制条件:b是一个已知的函数,这个式子的意思是F(ai)映射到F(i)就像b那样子,用更离散数学的说法讲就是:F和b有点同构的意思(同构还需要把原创 2017-07-25 20:56:13 · 349 阅读 · 0 评论