摘要:构造题, 交互题选做。还会选入一些其他妙妙题 阅读全文
posted @ 2021-02-02 20:49 dysyn1314 阅读(502) 评论(18) 推荐(9) 编辑
摘要:枚举 r。注意到关键性质:位置 r 必被选出。顺着这个思路,看哪些点是能被 r 看见的。进一步发现大区间可以直接从小区间转移过来。于是可以自然地得到一个 DP 做法 阅读全文
posted @ 2021-03-04 12:57 dysyn1314 阅读(13) 评论(1) 推荐(0) 编辑
摘要:首先转化为算每种完美匹配出现的概率之和。发现难点是处理 t = 1 和 t = 2。将一组的两条边拆开,假装他们就是 t = 0 的两组。考虑这样算会对答案有什么影响。t = 1 时,会在两条边同时出现在完美匹配里时,把概率少算 1/4。我们新建一种转移,把这 1/4 补回来即可。t = 2 同理。 阅读全文
posted @ 2021-03-01 17:25 dysyn1314 阅读(27) 评论(1) 推荐(1) 编辑
摘要:使用容斥原理解本题需要大量的分类讨论,故我们转而考虑不重不漏地计数。将约数按它在 A,B,C 哪几个里出现过,分为 7 类。枚举三元组里每个数的种类,则选择的方案数可以用一个组合数公式计算出来 阅读全文
posted @ 2021-02-27 10:35 dysyn1314 阅读(20) 评论(0) 推荐(0) 编辑
摘要:本文主要介绍了卡特兰数的定义,几种常见形式,和它对应的实际意义。利用其实际意义,可以解决一类 DP 问题(NOI2018 冒泡排序)。此外,卡特兰数在生成函数的推导中也有应用,但不是本文探讨的重点 阅读全文
posted @ 2021-02-26 16:55 dysyn1314 阅读(38) 评论(0) 推荐(0) 编辑
摘要:在图上,题目问了你两个看似无关的问题,然后让你任选其中一个给出解(构造出满足条件的方案)。这是一种特殊的构造问题,在 CF 的比赛中时有出现。如果不掌握相关的技巧,思考起来是非常困难的。本文通过整理了若干道这样的题目,力求帮助读者打开思路,掌握解决这类问题的方法和套路。 阅读全文
posted @ 2021-02-24 00:50 dysyn1314 阅读(130) 评论(3) 推荐(6) 编辑
摘要:判断两点之间是否有边,一般可以采用 vector 上二分(时间 O(log), 空间 O(m))或二维数组(时间 O(1),空间 O(n ^ 2))。本文创造性地结合了上述两种做法的优势,通过高超的压位技巧,提出了一个在常规空间限制内、时间复杂度 O(1) 的算法。希望对读者有所启发 阅读全文
posted @ 2021-02-23 21:10 dysyn1314 阅读(68) 评论(2) 推荐(1) 编辑
摘要:通过分析题目的性质,可以把每种局面都映射为一个数。进而把局面之间的变换,转化为数的变换,也就是一个数论问题。此时有两种做法,一种是暴力枚举,一种是同余最短路。根号分治一下,即可通过本题。 阅读全文
posted @ 2021-02-20 22:42 dysyn1314 阅读(53) 评论(0) 推荐(2) 编辑
摘要:对于某个数 x,某些问题里,需要在 [0, x - 1) 这些点上跑最短路。可以理解为,它是用最短路算法实现了一个 DP。这种做法被称为同余最短路。 阅读全文
posted @ 2021-02-20 21:56 dysyn1314 阅读(82) 评论(4) 推荐(0) 编辑
摘要:考虑查询一段区间 [l,r] 里线段并的长度怎么做。可以枚举右端点,维护左端点的答案。同时对数轴上每个位置,记录最后一个覆盖到它的线段编号,用 set 维护数轴上的这些线段。加入一条新线段时,要更新答案,相当于对一段左端点的答案做区间加。回到本题,可以二分价值第 k 大的区间的价值,然后求价值大于等于 mid 的区间数量,做法和上面类似 阅读全文
posted @ 2021-02-15 16:38 dysyn1314 阅读(37) 评论(0) 推荐(0) 编辑
摘要:考虑只划分一轮的情况。对于所有 k,发现划分为 k 块的方案数,要么是 0,要么是 1。对“有唯一一种划分方案”所需的条件稍作转化,就能求出每个 k 是否存在方案了。然后考虑不止划分一轮的情况,可以做一个简单的 DP。时间复杂度是调和级数。 阅读全文
posted @ 2021-02-14 17:50 dysyn1314 阅读(33) 评论(0) 推荐(0) 编辑
摘要:两棵树上公共的边我们都不去动它。将它们缩起来。然后每次找一个叶子节点,拆掉它和父亲的边。发现一定能找到另一条边加上。可以用并查集维护 阅读全文
posted @ 2021-02-10 13:48 dysyn1314 阅读(22) 评论(0) 推荐(0) 编辑
摘要:有关“序列、区间里、数值的出现次数”的问题,一般都要想到用莫队来维护。莫队后,往往就是要维护一个序列,支持单点修改,然后回答各种各样的询问。因为外层套了莫队,所以需要 O(1) 的单点修改,而询问则可以较慢。一般的数据结构(如线段树、平衡树),修改和查询都是 O(log n) 的,往往难以胜任。此时有一些巧妙的解决方法。 阅读全文
posted @ 2021-02-04 10:55 dysyn1314 阅读(79) 评论(0) 推荐(0) 编辑
摘要:首先想到把 k/2 个元素分为一块,不同块里元素的去重,可以暴力枚举每一对块,将它们一起加入队列。搞一对块就清一次队列,有点浪费。考虑把块连成一张有向图,那么每次可以顺着图上的路径一直走。问题转化为将图划分为尽可能少的路径,使得每条边恰属于一条路径。发现扩充为完全图后,可以得到更优秀的划分方案。 阅读全文
posted @ 2021-02-03 21:31 dysyn1314 阅读(21) 评论(0) 推荐(0) 编辑
摘要:对值域分块,每块内按原序列里的位置排序。查询时把每块内下标在 [l,r] 之间的提取出来,依次合并。问题转化为预处理出每块内的所有区间对应的集合。可以在值域上分治。每次把小于等于 mid 的元素和大于 mid 的元素,按原顺序分在两边,递归求解后,再把两边的答案合并。 阅读全文
posted @ 2021-02-03 01:06 dysyn1314 阅读(32) 评论(0) 推荐(0) 编辑
摘要:构造题, 交互题选做。还会选入一些其他妙妙题 阅读全文
posted @ 2021-02-02 20:49 dysyn1314 阅读(502) 评论(18) 推荐(9) 编辑