摘要: 今年省选考了这个技巧,感觉之前没做过类似的题的话现场挺难想出来的. 我们发现对 1 个数 +1 可以看作从低到高位的第一个 0 修改成 1,该 0 后面的 1 修改成 0. 将一个节点的所有儿子对应的数放到该节点对应的 01 trie 中进行修改的话就是将 0,1 翻转. 翻转后走 0 那边,然后递 阅读全文
posted @ 2020-07-13 15:10 EM-LGH 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 求:对一个数列进行 $k$ 次冒泡排序后的结果. 先考虑数字互不相同的情况. 设 $i$ 位置前大于 $v[i]$ 的数字有 $ma[i]$ 个. 那么,如果 $k \leqslant ma[i]$,则 $i$ 位置的数就会移到 $i-k$. 否则,$i$ 位置的数就会向前移动 $ma[i]$ 次后 阅读全文
posted @ 2020-07-13 14:48 EM-LGH 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 数位 DP. 题意:给定 $n \leqslant 10^{700}$,求 $1$ 到 $n$ 中每个数在各数位排序后得到的数的和. 这道题从整体上看上去貌似不太可做,不妨从每一位开始考虑. 比如说我们可以考虑第 $i$ 位为 $k$ 的数目,然后乘上 $10^i$ 后就是这一位的贡献了. 这么做的 阅读全文
posted @ 2020-07-13 14:08 EM-LGH 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 现在看来这道题就简单了. 首先要知道,树形 DP 的复杂度是 $O(n^2)$ 的(通过严格控制子树大小,均摊下来一个状态只会贡献 n 次). 然后这道题要求选的个数最多为 $k$,所以复杂度就是 $O(nk)$ 的. 设 4 个状态:$f[x][y][0/1],g[x][y][0/1]$ 分别代表 阅读全文
posted @ 2020-07-13 10:47 EM-LGH 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 这道题有 3 个操作: 1. 换根 2. 求 LCA 3. 子树修改/子树求和. 对于第一个操作,直接换根就行. 对于第二个操作,分这几种情况讨论:$x,y$ 都在以 1 为根,$rt$ 的子树中,$x,y$ 其中 1 个在子树中,$x,y$ 都不在子树中. 对于都在子树中的情况,答案即为 $lca 阅读全文
posted @ 2020-07-13 09:20 EM-LGH 阅读(146) 评论(0) 推荐(0) 编辑