2018HDU多校赛
文章平均质量分 84
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
HDU 6305 2018 HDU多校赛第一场 RMQ Similar Sequence(笛卡尔树+手工栈)
大致题意:给你一个串A,定义RMQ相似串为,对任意区间[L,R],两个串RMQ所在位置相同。告诉你B串中每个元素服从于[0,1]上相互独立的均匀分布。B的权值定义为,当B与A串RMQ相似时,权值为所有元素之和,否则为0。现在问你B串的期望权值是多少。首先,看到这种RMQ然后两个串要相似的,很容易想到用笛卡尔树。所谓笛卡尔树,就是说,对于一个区间,我选择RMQ作为根,然后把区间分为两部分。这两部分再次分别用RMQ作为根继续划分,直到划分到单位区间。这题的话求一个期望,显然只需要关心那些权值不为0的。B与A串R原创 2018-07-25 00:08:08 · 538 阅读 · 0 评论 -
HDU 6428 2018HDU多校赛 第十场 Calculate(莫比乌斯反演 + 积性 + 线性筛)
题意简单粗暴,让你求 。与gcd有关,一般来说都是要上莫比乌斯来反演一下了。具体来说,我们先来推一些式子: 那么,原式我们就可以写成:然后我们再交换一下求和次序:对于后面这个东西,我们可以发现,对于一个数字x^k,他能够被d整除,当且仅当,其中pi表示d分解质因子的每一个...原创 2018-08-26 20:44:47 · 838 阅读 · 0 评论 -
HDU 6407 2018HDU多校赛 第八场 Pop the Balloons(状态压缩dp)
大致题意:给你一个m*n的表,其中为Q的位置表示为气球。每次,我扎破一个气球会导致与其相同行和列的气球一起爆炸。现在,询问给你扎1..k次,对于每个扎气球的次数i,问你有多少种方式使得可以把所有的气球扎破。数据范围M和N一个是12一个是20,显然的一个状态压缩dp,但是这个状态却不是那么好表示。按照正常思路,由于m的范围更小,所以我用一个12位的数字表示每个行是...原创 2018-08-18 14:34:28 · 1018 阅读 · 0 评论 -
HDU 6405 2018HDU多校赛 第八场 Make ZYB Happy(广义后缀自动机)
大致题意:给你n个字符串,然后每个字符串有一个快乐值。然后给你m个询问,每个询问给你一个长度,让你写出一个不大于这个长度的字串。这个字串的权值定义为,如果这个字符串中出现过第i个给定字符串的子串,那么权值乘以第i个字符串的快乐值,最后答案就是多个快乐值相乘。现在问你给定长度的字符串权值的期望。首先,我们考虑这个权值的分母是多少。显然长度不超过x,那就是说长度可以是1、2、...、x,对应26个字母,那么方案数就是。然后我们再来看分母。分母肯定是计算每一个长度的贡献,对于一个长度,他可以是很多个串的子串,所以原创 2018-08-15 22:48:53 · 654 阅读 · 2 评论 -
HDU 6350 2018HDU多校赛 第五场 Always Online(图论 + 并查集 + 组合计数)
大致题意:给你一个仙人掌图,让你计算:。根据去年多校赛某一道题的经验,很多仙人掌图的问题,其实可以转化为树的问题。所以我们同样考虑,如果这是一棵树的话如何去做。注意到表达式里面的flow(i,j)表示从i到j的最小割或最大流,而在树上的最小割可以看作是两点之间连线的最短边,那么我们要做的就是统计每一条边作为最短边的贡献。这样我们不禁就联想到了之前做过的 Codeforces 915F 。这题是求任意两点之间路径上最长边减去最短边之差之和。和那题类似,在不考虑仙人掌图,而是普通树的情况下,本题考虑对边进行排序原创 2018-08-12 21:46:27 · 345 阅读 · 0 评论 -
HDU 6360 2018HDU多校赛第五场 kaleidoscope(Polya计数+dp)
大致题意:一个菱形六面体,有60个面,然后每个面进行染色,然后要求是第i种颜色不少于c[i]个,问有多少个本质不同的染色方案。看到这个菱形六面体,60个面,不要自闭……其实仔细想想这个图形也很简单。我们把每一个凸出来的菱形顶点相连,我们发现会变成一个十二面体。正如题目种所说,菱形六面体是十二面体的每个面中点往中间收缩形成的。因此,这个60面看起来吓人,但其实就是一个十二面体。所以对于十二面体,我们同样考虑用polya计数。根据套路,首先计算定理和置换数,然后计算每一个置换的循环节,还有每一类置换群对应的循环原创 2018-08-07 21:27:28 · 612 阅读 · 0 评论 -
HDU 6338 2018HDU多校赛 第四场 Depth-First Search(组合数学+平衡树/pbds)
大致题意:给你一个dfs序列B和一棵树,现在让你在这个树上随机选择一个点,然后按照随机的dfs顺序走。问你最后能走出几个dfs序列,是得该dfs序列字典序小于给定的dfs序B。首先,我们考虑一棵树有根树他的dfs序有多少种。我们可以这么考虑,对于任意点x,我都可以任意的向它的所有儿子走去,那么就会对应 种方法。我们注意到,除了根之外,所有的点的儿子的数目等于其度数减一,那么,我们便可以得出一棵有根树的dfs序列为:。进一步,我们可以令 ,那么对于不同的根,其对应树的方案数就是 res*deg[root],原创 2018-08-02 20:47:27 · 608 阅读 · 0 评论 -
HDU 6368 2018HDU多校赛 第六场 Variance-MST(LCT+kruskal)
大致题意:给你很多条边,每条边有边权,现在让你找到一个方差最小的生成树,即最小方差生成树。看到这题,我们首先回忆一下很久之前做过的一道,求最小极差生成树的题目 CSU 1845 。这套题目里面用到的主要思路就是,最小极差肯定是连续的一段,然后我就按照边的权值大小排序,每次看边是否可以直接加入,如果可以则直接加入,否则在加入这条边之后的环中寻找一条权值最小的边删掉。这样所有的边遍历一遍,中间过程中的极差最小就是我们的解。接着,我们考虑这道题目,显然,这题的方差和极差是有关系的,因为方差越小意味着样本之间越接近原创 2018-08-10 11:25:02 · 857 阅读 · 0 评论 -
HDU 6326 2018HDU多校赛 第三场 Monster Hunter(贪心+并查集+优先队列)
大致题意:有N个怪物,然后按照树的形式排列,如果你要打某一个怪物,首先要把它的父亲打掉。你打第i个怪物会扣ai滴血,消灭之后系统会奖励你bi 滴血,现在问你初始的时候至少需要多少血才能够保证,在最优的打怪顺序下,中途的血量不低于0。本题肯定是存在一组解使得中途血量不低于0的,于是考虑贪心这个打怪的顺序。首先,如果两个怪物一个打下来血量会减少,一个会增加,那么我肯定是先打血量增多那个。其次,都是增加的时候,考虑先打消耗少的。然后我们再考虑如果两个都是减少的时候怎么判断。我们考虑最后一个怪物,它的HP奖励是没有原创 2018-07-31 19:57:40 · 578 阅读 · 0 评论 -
HDU 6340 2018HDU多校赛 第四场 Delightful Formulas(莫比乌斯反演+伯努利数+NTT+积性)
大致题意:给你k和m,还有n分解质因子之后的质因子及其对应的指数,让你求 。 首先,这种含有gcd的式子,第一步肯定是进行莫比乌斯反演,这里由于前面好几篇都由类似的反演形式,所以我就不展开了,直接就得出反演之后的结果: 对于最右边的式子 ,我们把i*d看作定值,这就是关...原创 2018-08-05 13:14:00 · 694 阅读 · 0 评论 -
HDU 6372 2018HDU多校赛 第六场 sacul(Lucas定理+矩阵)
大致题意:HMBB(海绵宝宝矩阵)的长宽为,p表示第c个质数。然后每一个位置(i,j),如果 那么这个位置为1,否则为0。现在令F[k][n]表示一个长度为的一个HMBB矩阵的k次方的每个位置和。现在让你求。乍一看毫无下手之地。但是不要自闭,静下心来,发现这个 p为质数,不正好就是Lucas吗?然后你看看题目标题,不正是sacul,Lucas反过来吗 :)根据Lucas定理,要使得一个位置为1,当且仅当的 i 在p进制下的每一位都要大于等于 j 在p进制下的每一位。那么,我们再来考虑这个矩阵的k次方怎么原创 2018-08-09 16:16:21 · 383 阅读 · 0 评论 -
HDU 6327 2018HDU多校赛 第三场 Random Sequence(概率期望dp+数论)
大致题意:给你一个数列,里面的数字要么是0,要么是1~m中的一个数字。你需要随机的把这些0替换成1~m中的任意一个,然后再计算着整个数列的权值。权值定义为,现在问你最后权值的期望。由于这个v数组是输入的,也就是说没有什么性质,所以这个权值的表达式也不能用数论的知识推出什么结论。因此我们考虑暴力的dp。我们令dp[i][j][k][l]表示当前计算到第i位,且a[i]取j,a[i-1]取k,a[i-2]取l时的期望的分子。那么,从这个状态出发,枚举a[i+1]的数值,就看求出着四个数字的gcd,对应转移过去即原创 2018-07-31 15:33:41 · 801 阅读 · 0 评论 -
HDU 6321 2018HDU多校赛 第三场 Dynamic Graph Matching(状态压缩dp)
大致题意:一开始图是空的,总共有m个操作,每次可以添加或者删除一条边,每个操作结束后,输出这个图里面匹配数为1,2,...,n/2的方案数。看到n的范围是10,然后操作数是3W,就应该直接想到这是一个状压dp的……一开始还往组合数学,容斥原理方面去想……还好最后做出来了。首先,我们考虑加入一条边之后会产生多少贡献。显然是加入这条边之前,所有不包含这条边以及这两个点的匹配的数目。我们用dp[status][i]表示取的点的状态为status,然后构成i个匹配方案数。当加入边(x,y)之后,dp[status|原创 2018-07-31 10:25:10 · 251 阅读 · 0 评论 -
HDU 6331 2018HDU多校赛 第三场 Walking Plan(最短路+矩阵优化+分块)
大致题意:给你一个含有不超过50个点的图,然后有q个询问,每次给出三个数字s、t和k,问从s出发走到t,至少需要经过k条边的最短路径是多少。非常厉害的一道题,曾经我以为自己对矩阵的所有用途已经很了解了,但是这次再一次让我发现自己真的还是太无知……首先,我们考虑最初状态的邻接矩阵的含义,f[i][j]表示从i走到j最近的一条边的长度,那么我们也可以看成是从i到j经过一条边的最短路。然后,如果考虑这个矩阵自己与自己进行矩阵“乘法”,这里打个引号因为这个乘法的含义不同于普通的矩阵乘法,具体来说,我们定义乘法为:,原创 2018-07-30 23:34:08 · 377 阅读 · 0 评论 -
HDU 6314 2018HDU多校赛第二场 Matrix(容斥原理+组合计数)
大致题意:有一个m*n的矩阵,每一个格子只能够涂上黑或者白,然后现在要求至少有a行和b列全部涂黑,问有多少种涂色方案。首先,%%% dls。这个容斥原理还是挺好想的,但是把一个的求和式子优化到还是tql……题目要求是至少有a行和b列全部涂黑,那么可以考虑最后的答案,其中time(u,x)表示恰好有u行和x列被涂黑的方案,也意味着有n-u行和m-x列没被完全涂黑,于是有: ,其中这个f(n-u,m-x)表示n-u行和m-x列没被完全涂黑的方案数。接下来,我们就来讨论如何去求这个f(n-u,m-x)。讨论没被完原创 2018-07-27 15:34:12 · 929 阅读 · 0 评论 -
HDU 6311 2018HDU多校赛第二场 Cover(欧拉回路)
大致题意:给你一个图,不一定连通,问最少用几笔可以把它一笔画画完,要求输出对应的路径。吐槽一下,这个题目描述的英语吧,现场的时候根本读不懂题目……一笔画问题就是欧拉路或者欧拉回路问题。根据定理一个连通图如果奇点个数大于2则不能一笔画,具体需要的次数是,其中这个n表示度为奇数的点的个数。那么问题的关键就是如何找这个路径了。对于需要个路径才可以覆盖的图,我们考虑把这条路径的首尾两两相连,那么最后这样加了边之后的图就一定能够用一条路径遍历所有的边。也即,对于有n个奇点的图,我们把其中n-2个点两两相连,增加条边,原创 2018-07-27 14:31:41 · 343 阅读 · 0 评论 -
HDU 6315 2018HDU多校赛第二场 Naive Operations(线段树+树状数组)
大致题意:初始的时候给你序列bi,然后ai初始为0。现在又两种操作add l r 和query l r。add是把a中区间[l,r]加一,query是让你求∑⌊ai/bi⌋,即区间内ai数值除以bi向下取整。个人最擅长做的题系列~现场50min时A题O(∩_∩)O……首先说明一下,这里用普通的线段树维护区间和之后再去除法,什么通分什么的都不行。因为这里的次序是先向下取整再进行求和。所以得考虑用其他的方法。仔细观察,我们可以发现,只有当ai的数值增加了bi的时候,才会对最后的结果产生贡献。因此,我们完全可以利原创 2018-07-25 19:23:17 · 432 阅读 · 2 评论 -
HDU 6304 2018 HDU多校第一场 Chiaki Sequence Revisited(二分+倍增规律)
大致题意:告诉你数列的递推公式,让你求和……首先,这种下标上面有前几项的数列,基本上不要去想用矩阵快速幂解决。还是想想规律吧……网上很多什么lowbit的,其实感觉有点误导,毕竟这个lowbit不是树状数组的lowbit,而是重新改编定义的lowbit。规律的话,首先列出前几项:1,1,2,2,3,4,4,4,5,6,6,7,8,8,8,8,9,10,10,11,12,12,12,13,14,14,15,16,16,16,16,16,17……已经写出来了这么多了……我们可以发现,如果不看第一个1,1,3,5原创 2018-07-24 21:48:36 · 425 阅读 · 0 评论 -
HDU 6416 2018HDU多校赛 第九场 Rikka with Seam(dp + 前缀和优化)
大致题意:给你一个n*m的01矩阵,现在要让你每一行和每一列都去掉一个数字,而且要求相邻两行之间去掉数字的位置的绝对值要小于等于k。现在问你删除之后的矩形最多有几种。首先,我们一行一行考虑,对于同一行,显然是看有多少个块,有多少个块就有多少个方案。然后对于整个矩阵来说,任意位置(i,j)可以从上一行的(j-k,j+k)之间转移过来。dp[i][j]表示不考虑重复的情况下,处理到第i行,且第i行删掉第j个位置的方案数。那么,显然根据之前说的转移区间,有转移方程:原创 2018-08-21 11:24:54 · 652 阅读 · 0 评论