上一页 1 2 3 4 5 6 7 8 ··· 14 下一页
摘要: 区间 DP。朴素做法是 O(n^5) 的。通过更巧妙的状态设计,可以做到 O(n^4)。本文将详细讲解这种巧妙的状态设计,并帮助读者感谢理解它的含义。 阅读全文
posted @ 2020-12-26 22:16 duyiblue 阅读(164) 评论(1) 推荐(1) 编辑
摘要: 首先发现每个字母会对答案有一个贡献系数,是 1 或 -1。结论是,除了 n 的系数必须是 1,n - 1 的系数必须是 -1,其他数的系数可以任意选择。于是问题转化为选择系数,使得和为 T。可以从大到小贪心。本文将证明其正确性。 阅读全文
posted @ 2020-12-24 14:16 duyiblue 阅读(326) 评论(1) 推荐(2) 编辑
摘要: 每个初始时的格子会唯一对应一个最终的格子,于是拆开考虑每个格子的贡献。转化为对 n^2 个三元组,分别进行一样的操作。此时的操作是可以合并的。遍历 m 个操作,预处理出:任意一个初始三元组在被操作后会产生什么变化。然后将这个变化分别作用于所有初始三元组即可。 阅读全文
posted @ 2020-12-20 15:20 duyiblue 阅读(430) 评论(0) 推荐(1) 编辑
摘要: 做 KMP 后,从 fail[x] 向 x 连边,得到一个有根树森林。用树链剖分优化暴力跳 border 的过程,转化为一个序列上的数据结构问题。可以离线,进一步转化为静态的区间覆盖和区间最小值查询问题。 阅读全文
posted @ 2020-12-16 22:06 duyiblue 阅读(309) 评论(0) 推荐(2) 编辑
摘要: 发现可能出现的 42 的幂很少。如果只有操作 3,我们可以暴力 while,用线段树修改,每个位置只会被更新 log_{42}(maxValue) 次,总时间复杂度 O((n + q) * log_{42}(maxValue) * log_{2}(n))。在有操作 2 时,每个位置上数值不再单调增加,会影响前面的复杂度分析。此时引入一种懒惰状态,表示数值等于它后面第一个非懒惰状态的值。在操作 2 时,只修改 r 位置,并把 [l, r - 1] 置为懒惰状态。因为每次只需要增加 O(1) 个非懒惰状态,时间复杂度正确。 阅读全文
posted @ 2020-12-15 17:19 duyiblue 阅读(339) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2020-12-09 06:55 duyiblue 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 90 + 84 + 0 + 35。完全不会构造题。输了! 阅读全文
posted @ 2020-12-05 18:28 duyiblue 阅读(2772) 评论(8) 推荐(6) 编辑
摘要: 离散化,设排好序后的序列为 b,对每个位置 i,若 ai != bi,则从 bi 向 ai 连一条有向边。容易发现得到的图,每个连通块都存在欧拉回路,可以用一次操作排好序。此时已经最小化了操作到的位置数。考虑调整策略,最小化操作数量。发现选出若干个连通块后,只需要 2 次操作就能将它们全部排好序(先合并,再操作)。于是在满足限制 s 的前提下,应先合并尽可能多的连通块 阅读全文
posted @ 2020-11-28 23:05 duyiblue 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 最少的操作次数显然是 n - 置换环的数量。操作对每个置换环是独立的,将它们的操作序列用组合数插到一起即可。考虑求一个环的方案数。设 dp[i] 表示长度为 i 的环的方案数。朴素 DP 是 n^2 的,可以用分治 FFT 优化。 阅读全文
posted @ 2020-11-25 23:01 duyiblue 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 分析问题性质,容易得到一个 O(n^2) 做法。考虑对每个 Alice 的起点二分答案。换成整体二分,每次建虚树,在虚树上树形 DP,即可做到 O(n log^2 n)。注意要判断一个节点到 Alice 和 Bob 距离相等的情况,比较复杂。 阅读全文
posted @ 2020-11-25 21:03 duyiblue 阅读(449) 评论(1) 推荐(1) 编辑
摘要: 本题有一个经典的 DP + 容斥做法,时间复杂度是 $O(nk)$。本文作者在此基础上,创新性地发掘题目性质,简化 DP 状态,利用数据结构优化 DP,提出了一个时间复杂度 $O(n)$ 的做法。显然相比经典做法,是更加优秀的。本文将分别介绍这两种做法。 阅读全文
posted @ 2020-11-22 23:45 duyiblue 阅读(313) 评论(2) 推荐(2) 编辑
摘要: 对 S 的长度为 x 的后缀,发现 x - h(x) 有两个很好的性质。(1) 单调不降。(2) 值域在 [-|T|, |T|] 这个很小的范围内。于是考虑对这个分段函数进行 DP。将函数的值域作为 DP 状态,位置 x 作为 DP 值。转移和朴素 DP 一样,分三种情况。DP 边界需要注意,细节挺妙。 阅读全文
posted @ 2020-11-21 10:25 duyiblue 阅读(337) 评论(4) 推荐(0) 编辑
摘要: 一个结论是,不存在大小大于 2 的环。于是我们只需要保证图连通即可。从高到低考虑每一位,把数分成当前位为 0 的集合和当前位为 1 的集合,则为保证连通,必须有至少一个集合,大小小于 2。枚举删哪个集合,然后递归即可。本质是在 Trie 树上树形 DP。 阅读全文
posted @ 2020-11-19 22:06 duyiblue 阅读(504) 评论(4) 推荐(2) 编辑
摘要: 考虑序列里唯一的、出现次数最多的数 x。结论:最长的好的子段,一定满足,x 是其中出现次数最多的数之一。然后可以枚举另一个出现次数最多的数 y。把 x, y 分别看成 1, -1,其他数看成 0,则问题转化为求最长的、和为 0 的子段,这很简单。在 D2 里,根据出现次数最多的元素的出现次数,进行根号分治,出现次数大时,可能的值就少,可以套用前一种方法。出现次数小时,可以枚举出现次数,做 two pointers 阅读全文
posted @ 2020-11-19 21:01 duyiblue 阅读(1006) 评论(0) 推荐(4) 编辑
摘要: 分 n 为奇数和偶数两种情况。奇数时,容易用人类智慧构造出一种方案。偶数时,考虑何时有解,何时无解。发现一次操作不会改变所有数的异或和。那么,有解的必要条件是,所有数异或和为 0。发现此时,随便拿出一个数,对剩下 n - 1 个数按奇数的方法构造即可。 阅读全文
posted @ 2020-11-19 19:17 duyiblue 阅读(485) 评论(1) 推荐(2) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 14 下一页