摘要:构造题, 交互题选做。还会选入一些其他妙妙题 阅读全文
posted @ 2021-02-02 20:49 dysyn1314 阅读(881) 评论(23) 推荐(9) 编辑
摘要:lcp 就是后缀树上的 lca。因为字符串随机,所以后缀树树高是 O(log n) 级别的。将询问离线,从小到大枚举 R,暴力跳祖先,更新一些 i 的答案。需要数据结构支持:前缀对一个值取 max,区间求和。发现要取 max 的值是 O(log n) 级别的,对每个值记录最大位置,就可以实现 O(1) 修改,O(log n) 查询。总时间复杂度 O(n log n)。 阅读全文
posted @ 2021-04-07 15:55 dysyn1314 阅读(87) 评论(0) 推荐(0) 编辑
摘要:分 b > d 和 b <= d 两种情况讨论。关于 b, d 做 cdq 分治。每次考虑右边对左边的贡献,这样 b, d 的大小关系就解决了。第一种情况比较简单,就是在可持久化 01 trie 里查询一下就行了第二种可以考虑每个 b 对 d 的贡献,方法就和第一种情况差不多了,也就是把“查询”改成“打标记”。 阅读全文
posted @ 2021-03-27 15:17 dysyn1314 阅读(1219) 评论(9) 推荐(6) 编辑
摘要:用总数减去不合法的排列数。考虑不合法的排列里的极长不合法段,那么不合法的排列可以分为两类:有两个极长不合法段的,或者有三个及以上极长不合法段的。对于前者,发现至少有一个不合法段是前缀或后缀,且数值为 1...k,可以递推求出其方案数(二次容斥)。对于后者,不合法段一定不相交。考虑用 DP 对齐进行划分,再用前面处理好的答案算出其排列方案数。 阅读全文
posted @ 2021-03-25 23:18 dysyn1314 阅读(62) 评论(0) 推荐(0) 编辑
摘要:首先把问题转化为:有一个给定的数组 b[1...n],一个数 x,使得所有 (b[i] + x) 的二进制里 1 的个数之和最小。从低到高逐位 DP,发现要考虑上一位有没有进位,那么状态数是 2^n 的。进一步观察,因为每个数加的 x 是一样的,所以在这些低位上原数值越大,越有可能进位。所以状态里只需要记录有多少个数进位,然后把序列排个序,就知道具体是哪些数进位了 阅读全文
posted @ 2021-03-25 23:12 dysyn1314 阅读(43) 评论(0) 推荐(0) 编辑
摘要:本文提供了两种解法。一种是硬核数据结构做法。将限制转化为一个几何问题(双矩形的交),用扫描线求解。第二种是巧妙的贪心,证明了如何选择 n1, n2 是最有可能有解的,于是在确定 n1, n2 后,直接进行二分图染色即可 阅读全文
posted @ 2021-03-16 17:37 dysyn1314 阅读(106) 评论(1) 推荐(0) 编辑
摘要:以第一个关键节点为根。根据:v 在 x, y 的路径上,当且仅当 dis(v, x) + dis(v, y) = dis(x, y),可以确定每个关键点到根的路径。接下来按深度从小到大加入剩余的节点。只需要在已经确定的部分里为它找到一个父亲即可 阅读全文
posted @ 2021-03-15 13:09 dysyn1314 阅读(117) 评论(1) 推荐(0) 编辑
摘要:用 bitset 支持操作 2,但操作 3 比较困难。考虑不是记录每个数的出现次数,而记录每个数的倍数的出现次数。这样操作 2,3 都可以轻松实现。回答询问时,把每个倍数乘以莫比乌斯函数,就能还原出答案 阅读全文
posted @ 2021-03-11 21:25 dysyn1314 阅读(40) 评论(2) 推荐(0) 编辑
摘要:发现问题等价于:第一步可以到达右边任何一个点,且有推论:此后再也不需要向右走。我们特判第一步。然后问题转化为:求 x 及其右边所有点到 y 的距离的最小值。可以倍增。 阅读全文
posted @ 2021-03-08 11:44 dysyn1314 阅读(56) 评论(2) 推荐(0) 编辑
摘要:考虑最大前缀和所在的位置,需要满足什么条件。根据这个条件,可以得到一个状压 DP 的做法 阅读全文
posted @ 2021-03-07 17:32 dysyn1314 阅读(36) 评论(0) 推荐(0) 编辑
摘要:初步转化:不管死了多少个猎人,我们开枪时仍然在 n 个猎人里进行选择,如果选到了已经死去的猎人,就假装无事发生,再选一次,直到某次选中了活着的猎人为止。之后使用容斥,考虑哪些人死的时间晚于 1,写出式子后,发现可以用分治 NTT 计算。 阅读全文
posted @ 2021-03-06 21:48 dysyn1314 阅读(70) 评论(0) 推荐(0) 编辑
摘要:枚举 r。注意到关键性质:位置 r 必被选出。顺着这个思路,看哪些点是能被 r 看见的。进一步发现大区间可以直接从小区间转移过来。于是可以自然地得到一个 DP 做法 阅读全文
posted @ 2021-03-04 12:57 dysyn1314 阅读(42) 评论(1) 推荐(0) 编辑
摘要:首先转化为算每种完美匹配出现的概率之和。发现难点是处理 t = 1 和 t = 2。将一组的两条边拆开,假装他们就是 t = 0 的两组。考虑这样算会对答案有什么影响。t = 1 时,会在两条边同时出现在完美匹配里时,把概率少算 1/4。我们新建一种转移,把这 1/4 补回来即可。t = 2 同理。 阅读全文
posted @ 2021-03-01 17:25 dysyn1314 阅读(84) 评论(1) 推荐(1) 编辑
摘要:使用容斥原理解本题需要大量的分类讨论,故我们转而考虑不重不漏地计数。将约数按它在 A,B,C 哪几个里出现过,分为 7 类。枚举三元组里每个数的种类,则选择的方案数可以用一个组合数公式计算出来 阅读全文
posted @ 2021-02-27 10:35 dysyn1314 阅读(58) 评论(0) 推荐(0) 编辑
摘要:本文主要介绍了卡特兰数的定义,几种常见形式,和它对应的实际意义。利用其实际意义,可以解决一类 DP 问题(NOI2018 冒泡排序)。此外,卡特兰数在生成函数的推导中也有应用,但不是本文探讨的重点 阅读全文
posted @ 2021-02-26 16:55 dysyn1314 阅读(139) 评论(2) 推荐(1) 编辑
摘要:在图上,题目问了你两个看似无关的问题,然后让你任选其中一个给出解(构造出满足条件的方案)。这是一种特殊的构造问题,在 CF 的比赛中时有出现。如果不掌握相关的技巧,思考起来是非常困难的。本文通过整理了若干道这样的题目,力求帮助读者打开思路,掌握解决这类问题的方法和套路。 阅读全文
posted @ 2021-02-24 00:50 dysyn1314 阅读(304) 评论(4) 推荐(8) 编辑