上一页 1 2 3 4 5 6 ··· 14 下一页
摘要: 用 bitset 支持操作 2,但操作 3 比较困难。考虑不是记录每个数的出现次数,而记录每个数的倍数的出现次数。这样操作 2,3 都可以轻松实现。回答询问时,把每个倍数乘以莫比乌斯函数,就能还原出答案 阅读全文
posted @ 2021-03-11 21:25 duyiblue 阅读(128) 评论(2) 推荐(0) 编辑
摘要: 发现问题等价于:第一步可以到达右边任何一个点,且有推论:此后再也不需要向右走。我们特判第一步。然后问题转化为:求 x 及其右边所有点到 y 的距离的最小值。可以倍增。 阅读全文
posted @ 2021-03-08 11:44 duyiblue 阅读(137) 评论(2) 推荐(0) 编辑
摘要: 考虑最大前缀和所在的位置,需要满足什么条件。根据这个条件,可以得到一个状压 DP 的做法 阅读全文
posted @ 2021-03-07 17:32 duyiblue 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 初步转化:不管死了多少个猎人,我们开枪时仍然在 n 个猎人里进行选择,如果选到了已经死去的猎人,就假装无事发生,再选一次,直到某次选中了活着的猎人为止。之后使用容斥,考虑哪些人死的时间晚于 1,写出式子后,发现可以用分治 NTT 计算。 阅读全文
posted @ 2021-03-06 21:48 duyiblue 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 枚举 r。注意到关键性质:位置 r 必被选出。顺着这个思路,看哪些点是能被 r 看见的。进一步发现大区间可以直接从小区间转移过来。于是可以自然地得到一个 DP 做法 阅读全文
posted @ 2021-03-04 12:57 duyiblue 阅读(115) 评论(1) 推荐(0) 编辑
摘要: 首先转化为算每种完美匹配出现的概率之和。发现难点是处理 t = 1 和 t = 2。将一组的两条边拆开,假装他们就是 t = 0 的两组。考虑这样算会对答案有什么影响。t = 1 时,会在两条边同时出现在完美匹配里时,把概率少算 1/4。我们新建一种转移,把这 1/4 补回来即可。t = 2 同理。 阅读全文
posted @ 2021-03-01 17:25 duyiblue 阅读(466) 评论(3) 推荐(2) 编辑
摘要: 使用容斥原理解本题需要大量的分类讨论,故我们转而考虑不重不漏地计数。将约数按它在 A,B,C 哪几个里出现过,分为 7 类。枚举三元组里每个数的种类,则选择的方案数可以用一个组合数公式计算出来 阅读全文
posted @ 2021-02-27 10:35 duyiblue 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 本文主要介绍了卡特兰数的定义,几种常见形式,和它对应的实际意义。利用其实际意义,可以解决一类 DP 问题(NOI2018 冒泡排序)。此外,卡特兰数在生成函数的推导中也有应用,但不是本文探讨的重点 阅读全文
posted @ 2021-02-26 16:55 duyiblue 阅读(766) 评论(1) 推荐(1) 编辑
摘要: 在图上,题目问了你两个看似无关的问题,然后让你任选其中一个给出解(构造出满足条件的方案)。这是一种特殊的构造问题,在 CF 的比赛中时有出现。如果不掌握相关的技巧,思考起来是非常困难的。本文通过整理了若干道这样的题目,力求帮助读者打开思路,掌握解决这类问题的方法和套路。 阅读全文
posted @ 2021-02-24 00:50 duyiblue 阅读(1053) 评论(4) 推荐(9) 编辑
摘要: 判断两点之间是否有边,一般可以采用 vector 上二分(时间 O(log), 空间 O(m))或二维数组(时间 O(1),空间 O(n ^ 2))。本文创造性地结合了上述两种做法的优势,通过高超的压位技巧,提出了一个在常规空间限制内、时间复杂度 O(1) 的算法。希望对读者有所启发 阅读全文
posted @ 2021-02-23 21:10 duyiblue 阅读(893) 评论(5) 推荐(5) 编辑
摘要: 通过分析题目的性质,可以把每种局面都映射为一个数。进而把局面之间的变换,转化为数的变换,也就是一个数论问题。此时有两种做法,一种是暴力枚举,一种是同余最短路。根号分治一下,即可通过本题。 阅读全文
posted @ 2021-02-20 22:42 duyiblue 阅读(320) 评论(0) 推荐(4) 编辑
摘要: 对于某个数 x,某些问题里,需要在 [0, x - 1) 这些点上跑最短路。可以理解为,它是用最短路算法实现了一个 DP。这种做法被称为同余最短路。 阅读全文
posted @ 2021-02-20 21:56 duyiblue 阅读(311) 评论(3) 推荐(1) 编辑
摘要: 考虑查询一段区间 [l,r] 里线段并的长度怎么做。可以枚举右端点,维护左端点的答案。同时对数轴上每个位置,记录最后一个覆盖到它的线段编号,用 set 维护数轴上的这些线段。加入一条新线段时,要更新答案,相当于对一段左端点的答案做区间加。回到本题,可以二分价值第 k 大的区间的价值,然后求价值大于等于 mid 的区间数量,做法和上面类似 阅读全文
posted @ 2021-02-15 16:38 duyiblue 阅读(849) 评论(1) 推荐(2) 编辑
摘要: 考虑只划分一轮的情况。对于所有 k,发现划分为 k 块的方案数,要么是 0,要么是 1。对“有唯一一种划分方案”所需的条件稍作转化,就能求出每个 k 是否存在方案了。然后考虑不止划分一轮的情况,可以做一个简单的 DP。时间复杂度是调和级数。 阅读全文
posted @ 2021-02-14 17:50 duyiblue 阅读(215) 评论(1) 推荐(0) 编辑
摘要: 两棵树上公共的边我们都不去动它。将它们缩起来。然后每次找一个叶子节点,拆掉它和父亲的边。发现一定能找到另一条边加上。可以用并查集维护 阅读全文
posted @ 2021-02-10 13:48 duyiblue 阅读(113) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 14 下一页