摘要: P2841 A*B Problem 这是一篇高精度 DP 的题解。 题目大意 给一个数 \(A\),找出最小的 \(B\) 使得 \(A*B\) 的十进制表示中只包含 \(0\) 和 \(1\)。 DP 设计 一看到这个题,想到的是从低位到高位确定 \(B\),因为 \(B\) 的高位无法影响 \( 阅读全文
posted @ 2022-01-11 20:53 Wild_Donkey 阅读(57) 评论(0) 推荐(1) 编辑
摘要: Convolution 概念 卷积 (Convolution), 是透过两个函数 \(f\) 和 \(g\) 生成第三个函数的一种数学算子. Wikipedia 上面是卷积的数学定义, 讨论的是连续函数的卷积, 在计算机科学中我们常用的一般的卷积就是对多项式做乘法, 属于离散卷积. 假设我们有两个 阅读全文
posted @ 2022-01-11 18:30 Wild_Donkey 阅读(171) 评论(0) 推荐(1) 编辑
摘要: THUPC2018 城市地铁规划 本题解和别的题解有两个不同。一个是 DP 采用了决策单调性,复杂度 \(O(n^2\ln n)\),劣于别人的 \(O(n^2)\)。另一个是根据度数构造树采用 set,\(O(n \log n)\),也劣于别人的 \(O(n)\),但是能过。 传送门 题目大意 便 阅读全文
posted @ 2022-01-11 18:28 Wild_Donkey 阅读(68) 评论(1) 推荐(1) 编辑
摘要: NOI2015 寿司晚宴 为什么没有人用容斥呢? 本做法复杂度 \(O(3^8n)\)。 题意 Link 给正整数 \([2, n]\),选两个不交子集,使得两个子集中任意两个数互质。求方案数。 题目转化 分析性质,发现对于每个质数 \(p\),两个数集中只有一个数集存在整除 \(p\) 的元素。所 阅读全文
posted @ 2021-12-12 15:32 Wild_Donkey 阅读(48) 评论(1) 推荐(1) 编辑
摘要: NOIP2021 学了四年多终于第一次参加提高组 NOIP. Day \(-3\) 做了一些状压, 属于是无头苍蝇乱飞了. 考前学新东西的是我了, 发现欧拉路没学, 怒补, 晚上因为自己无法发明欧拉路算法破防了, 遂颓. Day \(-2\) 感觉什么都没做就已经 Day \(-2\) 了啊. 早上 阅读全文
posted @ 2021-11-29 17:06 Wild_Donkey 阅读(167) 评论(1) 推荐(1) 编辑
摘要: NOIP2021-数列 显然是个 DP 题,这个题 \(O(n^3mk)\) 做法是不是垫底了啊。 状态设计 首先发现这个序列的元素的顺序不会影响权值和 \(S\) 值,所以我们可以使序列为空,然后将值填入序列,计算对权值和 \(S\) 的贡献,对这个过程进行 DP。 因为对于等于 \(i - 1\ 阅读全文
posted @ 2021-11-29 17:05 Wild_Donkey 阅读(165) 评论(1) 推荐(1) 编辑
摘要: Euler Path 欧拉路径, 即为一个有向图中, 能遍历整个图的所有边, 并且每条边只经过一次的路径. 因为看到二gou子学习了此内容, 所以我的博客才能在 NOIP 前一周内出现一篇学习笔记. 解存在的判定 不证自明地, 要想一条路径遍历所有边, 必须保证将有向边看成无向边后, 图是连通的. 阅读全文
posted @ 2021-11-17 08:58 Wild_Donkey 阅读(43) 评论(1) 推荐(1) 编辑
摘要: 均摊数据结构: 带旋链表 问题引入 在模拟赛中, 遇到一个题, 给出一个括号序列, 对每一个位置, 求包含它的合法的括号序列个数. 预处理 首先用栈将所有不可能被包含的括号都设为空格. 然后将所有 () 找出来, 作为链表的节点, 从左到右连起来. 在每个节点上存一个区间, 这个区间外面可以加一对匹 阅读全文
posted @ 2021-11-13 11:47 Wild_Donkey 阅读(65) 评论(3) 推荐(2) 编辑
摘要: CSP-S2021 捡漏记 前传: CSP-S2020爆零记 Day \(-4\) 因为早上 \(8:00\) 线上模拟赛和升旗冲突和班主任起了矛盾, 结果九牛二虎之力提前来机房后, 尴尬地迎接 \(7:40\) 升完旗来机房的同学. 模拟赛打得不错, 但是身体有点吃不住了, 前一阵子 SD 来了寒 阅读全文
posted @ 2021-11-02 19:57 Wild_Donkey 阅读(89) 评论(1) 推荐(1) 编辑
摘要: CSP-S 2021 括号序列 这道题考场杀我 \(2.5h\),写了两个错误算法,最后写了一个 \(O(n^4)\),然后优化成 \(O(n^3)\) 了。 题意 一开始读错题了,写了一个多小时的错解。当时以为只要括号都匹配,* 在哪里无所谓,只要连续的不超过 \(k\) 就可以。 所以请务必好好 阅读全文
posted @ 2021-10-26 18:46 Wild_Donkey 阅读(419) 评论(1) 推荐(1) 编辑
摘要: yLOI2018 扶苏的问题 线段树训练题 题意 维护序列,要求支持区间赋值,区间增量,查询区间最值。 线段树 前置知识: 线段树 区间修改,区间查询问题首先想到线段树,只是这里的线段树和普通的线段树不同,因为它有两种修改。 每个节点对区间赋值维护一个标记 \(Val\),如果它不是 \(\inft 阅读全文
posted @ 2021-10-26 18:45 Wild_Donkey 阅读(80) 评论(1) 推荐(1) 编辑
摘要: ZROI Day11: SA 倍增 过水已隐藏 SA 做 SAM 板子 求字符串本质不同的子串个数. 所有字串都可以唯一地表示为第 \(i\) 个后缀的第 \(j\) 个前缀, 共 \(\frac {n(n + 1)}2\) 个. 所以我们只要排序后缀, 然后求出 LCP_{i, i + 1}, 就 阅读全文
posted @ 2021-10-23 10:20 Wild_Donkey 阅读(52) 评论(1) 推荐(1) 编辑
摘要: CERC2014 Outer space invaders 这个题为什么没有写分治的呀? 题意 先把题意抽象一下。 \(n\) 条水平线段,坐标 \(\leq 10000\),要求选一些横坐标,花费 \(v\) 使得所有包含这个坐标的高度 \(\leq v\) 的线段被覆盖,求所有 \(n\) 条线 阅读全文
posted @ 2021-10-15 21:37 Wild_Donkey 阅读(41) 评论(1) 推荐(1) 编辑
摘要: 合并石子 (初探二项式反演) 排序不亏, 将 \(a\) 和 \(b\) 从小到大排序. 枚举第 \(k\) 大值 \(x\), 将方案数乘上 \(x\) 求和, 最后乘上 \(n!\) 的逆元. 对于每个 \(x\) 设 \(f_{i, j}\) 表示后 \(i\) 个 \(a\), 选择了 \( 阅读全文
posted @ 2021-10-12 18:58 Wild_Donkey 阅读(54) 评论(1) 推荐(1) 编辑
摘要: P6965 NERRC2016 Binary Code 传送门: P6965 + LOJ6036 树链剖分优化建图,复杂度 \(O(n\log^2n)\),开了 -O2 跑得真不慢。 题意 有 \(n\) 个二进制串,每个串最多有一位是 ?。 你要给 ? 填上 0/1,使得不存在 \(i\),\(j 阅读全文
posted @ 2021-10-09 15:58 Wild_Donkey 阅读(45) 评论(1) 推荐(1) 编辑
摘要: NWRRC2015 Insider’s Information 题意 对于 \([1, n]\) 的排列,给 \(m\) 个限制,第 \(i\) 个限制描述 \(b_i\) 出现在 \(a_i\),\(c_i\) 之间。保证存在一个排列满足所有限制。 构造一个 \(n\) 的排列至少满足 \(\lc 阅读全文
posted @ 2021-09-28 21:19 Wild_Donkey 阅读(60) 评论(1) 推荐(1) 编辑
摘要: CF97E Leaders 简要题意 给一个简单无向图,询问两个点之间是否存在长度为奇数的简单路径。简单路径定义为没有重复点的路径,路径长度定义为边数。 点双 这里简单路径的定义是每个点出现最多一次的路径,所以优先考虑点双。发现点双里面,只要有至少一个奇环,任意两点间都存在奇路径。 点的类型 继续探 阅读全文
posted @ 2021-09-28 21:17 Wild_Donkey 阅读(107) 评论(0) 推荐(1) 编辑
摘要: 双连通图的性质和证明 性质 首先讨论边双, 任选两点 \(u\), \(v\), 一条边 \(e\), 一定能找到至少一条简单路径 (不经过同一条边两次), 经过 \(e\) 连接 \(u\), \(v\). 然后讨论点双, 任选三点 \(u\), \(v\), \(w\), 一定能找到至少一条简单 阅读全文
posted @ 2021-09-24 10:42 Wild_Donkey 阅读(312) 评论(0) 推荐(2) 编辑
摘要: P6255 ICPC2019 WF Dead-End Detector 想当年这道题被选为校内 ACM 赛前训练,结果是历城二中 57 级全灭,全场三个队,只有有一个队有分,并且只有一道题,非常惨烈,今天重新审视这道题,发现当时水平确实太低。 题意 这题题意比较绕,场上对题意也是一知半解,感到迷茫的 阅读全文
posted @ 2021-09-24 10:41 Wild_Donkey 阅读(50) 评论(0) 推荐(0) 编辑
摘要: TJOI2016/HEOI2016 字符串 后缀自动机 + 线段树合并怎么能少了指针呢? 虽然都说指针被卡空间,但是这个题只有 \(10^5\) 的字符串,所以空间比较轻松。 题意 给一个字符串,每次询问子串 \([a, b]\) 的子串和 \([c, d]\) 的 LCP 长度。 注意,这里并不是 阅读全文
posted @ 2021-09-03 16:16 Wild_Donkey 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 不删除莫队 为了做字符串被迫学莫队的屑是我了. 模板 询问区间相同的数的最大间隔. 不删除 首先考虑不删除的情况, 维护两个数组 \(Fst\), \(Lst\), 分别表示当前区间内某个数第一次出现的下标和最后一次出现的下标. 每次增加一个元素 \(a_i\), 将对应的 \(Fst\) 或 \( 阅读全文
posted @ 2021-09-02 07:52 Wild_Donkey 阅读(27) 评论(0) 推荐(0) 编辑
摘要: HEOI2012 旅行问题 这题没有必要用树剖呀,这里有一篇线段树的题解。 题意简述 给 \(n\) 个字符串,每个询问在这些字符串中选两个前缀,要求输出它们满足要求的公共后缀的哈希值。这个公共后缀必须在给出的 \(n\) 个字符串的前缀中出现,并且要求尽可能长。 思路 对给出的字符串建立 AC 自 阅读全文
posted @ 2021-08-30 19:02 Wild_Donkey 阅读(43) 评论(0) 推荐(0) 编辑
摘要: CF883J Renovation 题意 共 \(n\) 天,每天有 \(a_i\) 经费。 有 \(m\) 个房屋,每个房屋有属性 \(b\),\(p\)。 第 \(i\) 天可以拆除 \(b < a_i\) 的房屋,每拆一座,会花费 \(p\) 的经费。经费可以转结到下一天。 使 \(a\) 单 阅读全文
posted @ 2021-08-30 19:01 Wild_Donkey 阅读(60) 评论(0) 推荐(0) 编辑
摘要: ZROI Day1: 倍增 令人疑惑的一天, 我还不如去卷题. RMQ (Range Maximum/Minimum Query) 区间查询最大/小值. ST (Sparse Table) 过水已隐藏 线段树 过水已隐藏 快速幂 过水已隐藏 LCA (Lowest Common Ancestor) 阅读全文
posted @ 2021-08-30 18:59 Wild_Donkey 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 可持久化平衡树 根据可持久化的基本思想可以得到: 一个数据结构可持久化, 可以存在一个儿子有多个父亲, 但是不允许一个父亲在同一位置 (如左儿子) 有多个儿子. 所以平衡树可持久化的基本条件是节点只记录儿子节点, 不记录父亲节点. 选择哪种平衡树用来持久化就是可持久化平衡树的第一步. 因为不能记录父 阅读全文
posted @ 2021-07-14 09:11 Wild_Donkey 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 可持久化并查集 可持久化, 随机访问一个数据结构在经历 \(k\) 次操作后的结果. 并查集, 维护元素对集合从属关系的数据结构. 可持久化并查集, 支持如下操作的数据结构: 合并两个元素所在集合 全局回到某时刻的状态 查询两个元素是否在同一集合 首先, 我们先考虑并查集需要维护什么. \(Fa_i 阅读全文
posted @ 2021-07-07 20:18 Wild_Donkey 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 扫描线 在很多题中, 扫描线都是非常有力的工具, 我之前从书上看过后花了好大力气领悟它的思想, 但是我居然现在才刚写, 着实不像话. 精神 扫描线的本质是在一个时间轴上扫描, 同时用数据结构维护序列在每个时间点的变化. 这个数据结构我们一般选用线段树. 模板: 矩形的并 顾名思义, 给 \(n\) 阅读全文
posted @ 2021-07-06 01:37 Wild_Donkey 阅读(179) 评论(0) 推荐(0) 编辑
摘要: SP9070&P3515 避雷针 直通车 前言 做 DP 最爽的不是 AC,而是不断地优化程序,每次达到更高的效率,都能收获非常浓烈的成就感。接下来的每代码, 至少能在某个 OJ 上 AC, 所以没有错误解法, 只有效率优劣之分. 题意 一个序列 \(a\),求所有最小的自然数 \(f_{i}\) 阅读全文
posted @ 2021-07-03 11:38 Wild_Donkey 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 粉刷匠 题意 这道题要求将 \(n\) 块长 \(m\) 的木板染色, 每次将一块木板的一个连续区域染成蓝色或红色, 最多染 \(t\) 次, 给出每个位置的目标颜色, 求染色后最多有多少位置符合目标颜色. \(n, m \leq 50, t \leq 2500\) 分析 首先看到这道题每块木板之间 阅读全文
posted @ 2021-07-02 14:24 Wild_Donkey 阅读(53) 评论(0) 推荐(0) 编辑
摘要: "春" 节 \(12\) 响 题意 给一棵有根树, 点带权, 将点分成若干点集, 要求一个点不能和它子树中的其它节点在同一个集合中. 每个点集的权值是这个集合中点权最大值. 求点集权值最小值. 分析 既然点集权值是点权最大值, 这就说明一个点加入一个点集的答案一定不会比单独新建一个点集劣, 所以我们 阅读全文
posted @ 2021-07-01 18:19 Wild_Donkey 阅读(58) 评论(0) 推荐(0) 编辑
摘要: NOI-Online 2020 跑步 题意 求整数可重复划分方案数, \(n \leq 10^5\). \(50'\) 状态 \(f_{i, j}\) 的表示数字 \(i\) 的划分中, 最大的数是 \(j\) 的方案数. 如 5 5 2 1 就是一个包括在 \(f_{13, 5}\) 中的一个划分 阅读全文
posted @ 2021-07-01 18:17 Wild_Donkey 阅读(79) 评论(0) 推荐(0) 编辑
摘要: yLOI 2019 棠梨煎雪 用线段树维护两个合并规则不同的值对刚学 OI 的 MnZn 不是很友好,于是就有了这篇题解。 题意 给 \(m\) 个长 \(n\) 的 0/1 串,串中存在 ? 字符表示既可以是 0,也可以是 1。 要求支持: 单点修改 将指定串改为给出的新串。 区间查询 查询一个区 阅读全文
posted @ 2021-06-29 18:39 Wild_Donkey 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 最小费用最大流问题 前置知识 关于网络最大流, 这是本博客需要用到的两个算法: 网络最大流·初步 另外还有效率更高, 可是最小费用最大流不会用到的两个算法: 网络最大流·进阶 前置知识就只有第一篇博客的内容, 需要提前学习完再来看费用流. 简介 最小费用最大流问题, 简称费用流问题, Wikiped 阅读全文
posted @ 2021-06-29 11:18 Wild_Donkey 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 网络最大流·Advanced 历史背景 对于网络流的初步, 半年前我写过一篇文章总结, Dinic 先生的两个算法. 在后来的日子里, 陆续有别人学习了最大流算法, 在议论着算法效率问题, 其中胜出者是@sxy, 他用 Dinic 某个神奇优化以最慢的一个点的时间为 \(70ms\) 左右的成绩赢得 阅读全文
posted @ 2021-06-29 11:17 Wild_Donkey 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 长链剖分 树链剖分可以分为三种, 分别是重链剖分, 动态树 (实链剖分) 和长链剖分 (Long Path Decomposition). 长链剖分的规则是将子树包含最深的后代的儿子设为 "长儿子", 然后将到长儿子的边称 "长边", 长边组成的链称 "长链", 其余的边都是 "短边". 和重链剖分 阅读全文
posted @ 2021-06-29 11:16 Wild_Donkey 阅读(188) 评论(0) 推荐(1) 编辑
摘要: k-d tree 定义 一种平衡树, 维护 \(k\) 维空间中的点的信息. 每个节点表示一个点, 每个子树表示对应的 \(k\) 维超长方体. 这样说可能过于抽象, 那就先分析特殊情况, 因为 \(k = 1\) 的时候, 维护的信息是序列上的, 所以这时的 1-d Tree 就是普通平衡树. \ 阅读全文
posted @ 2021-06-29 11:15 Wild_Donkey 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 替罪羊树(Scapegoat_Tree) 定义 一种平衡树, 能达到宗法树和 Treap 的常数, 不用旋转维护自己的平衡, 逻辑和宗法树类似, 在左右子树极度不平衡时维护它的平衡性, 只不过宗法树是旋转, 比较温和, 而替罪羊树采用的是重构左右子树这种比较激进的策略. 所以替罪羊树不需要旋转. 和 阅读全文
posted @ 2021-06-29 11:14 Wild_Donkey 阅读(110) 评论(0) 推荐(1) 编辑
摘要: 树套树 这是一种思想, 不是什么特定的数据结构, 不过实现起来一般都是从外层的树形数据结构的每个节点上, 挂一个内层树形数据结构的根的指针, 这样, 本来是要查询或修改外层节点的信息的行为, 变成了在外层某节点对应的内层数据结构上查询或修改某种信息. 容易发现, 这种思想非常占空间, 所以一般这种数 阅读全文
posted @ 2021-06-17 21:56 Wild_Donkey 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 宗法树 (Weight Balanced Leafy Tree) 宗法是西周的重要政治制度. 宗法制以血缘关系为基础, 核心是嫡长子继承制, 起着维护西周政治等级制度和稳定社会秩序的作用. Wikipedia 宗法树, 简称 WBLT. 这种数据结构最广泛的用途是做平衡树, 然而它除了 LCT 几乎 阅读全文
posted @ 2021-06-16 17:42 Wild_Donkey 阅读(783) 评论(1) 推荐(1) 编辑
摘要: 子序列自动机 (Subsequence Automaton) 时隔两个月回来学自动机. 子序列自动机可以在线性时间识别一个字符串 \(a\) 是否是 \(s\) 的子序列. 首先考虑 \(s\) 没有重复字符的情况, 那么 \(s\) 的子序列就是 \(2^{Len_s}\) 种, 分别是每个字符选 阅读全文
posted @ 2021-06-15 20:54 Wild_Donkey 阅读(97) 评论(0) 推荐(0) 编辑