摘要: 通过这道题了解二进制分组. 由于我们只需要求两两之间最短路的值而不需要求具体是哪两个点得到的最短路,可以使用二进制分组. 因为如果两个点对答案有贡献,那么这两个点一定在某个二进制位上不同,而 dijkstra 可以方便地求两个集合之间的最短路. 然后注意对于两个方向要分别跑一个 dijkstra. 阅读全文
posted @ 2020-07-27 21:35 EM-LGH 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 裸做的话是 $O(n \log^2 n)$ 的,即将 $a$ 进行二进制拆分,然后暴力更新. 考虑进行压位,即线段树的每一个叶节点维护长度为 $30$ 的状态. 加法操作如果需要进位的话就找到其后面的块中第一个 0 所在位置. 减法操作如果需要借位的话就找第一个 1. 第一个 0 与第一个 1 都可 阅读全文
posted @ 2020-07-27 20:48 EM-LGH 阅读(161) 评论(1) 推荐(0) 编辑
摘要: 比较好的一道后缀自动机题. 先枚举必选的前缀 $[1,k]$ 然后加上 $[k+1,n]$ 中本质不同子串个数. 但是这样的话会算重. 考虑哪些地方算多了: 假设 $i-1$ 的前缀为 $pre[i-1]$,然后当前的前缀为 $pre[i-1]+x$. 那么当前肯定会枚举到 $pre[i-1]+(x 阅读全文
posted @ 2020-07-27 10:42 EM-LGH 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 线段树加 hash 判重模板题. hash 的话必须要用双 base 哈希,否则会 WA. 然后这道题中最好不要用自然溢出,感觉比取模还要慢一些. 由于读入量巨大,必须要开读入优化才能过. 哈希的方式就是对于每个数维护 $\sum base^{num[i]}$,由于值域不大,提前预处理出来 base 阅读全文
posted @ 2020-07-27 08:06 EM-LGH 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 找规律+猜结论. 不难发现这个旋转 180 度其实是对于一个 $2 \times 2$ 的正方形内部对角线分别交换. 所以对于这个 $2 \times n$ 的数组来说可以将所有格子分成两类,这两类互不干扰. 那么判断是否合法的条件之一就是初态和末态对应种类的格子应该相同. 即 $(1,1)$,$( 阅读全文
posted @ 2020-07-27 08:03 EM-LGH 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 正常来说,单次操作的复杂度是 $O(k^2)$,然后整体复杂度是 $O(nk^2)$. 但是我们发现每次合并两个蚯蚓的复杂度的极限是 $O( min(size_{min},50) \times 50)$. 然后根据启发式合并的复杂度分析,即使要求遍历完 $size_{min}$,复杂度最高也就是 $ 阅读全文
posted @ 2020-07-27 07:51 EM-LGH 阅读(144) 评论(0) 推荐(0) 编辑