摘要:
题意 给定 \(n\) 个点,求平面上,曼哈顿距离最近的 \(k\) 点对。 Sol 仔细想想就会发现,曼哈顿距离不好做最近 \(k\) 点对。 考虑转成切比雪夫距离。\(x' = x + y, y' = x - y\)。 二分答案,每次 \(check\) 一个 \(dis\),询问距离小于 \( 阅读全文
摘要:
题意 给定一个序列,每次操作 \(swap(p_i, p_{(i + p_i) mod N})\)。 求将她变得有序的方案。 Sol 我们考虑对于一个位置不断的操作,发现最后一定会变成 \(0\)。 我们设她为 \(p_x\)。 考虑操作 \(p_{x - 1}\)。 发现当 \(p_{x - 1} 阅读全文
摘要:
题意 给定一张图,走出当前边的时间为 \(i\)。 \(q\) 次询问,问 \(s\) 是否能在 \(l \to r\) 中走到 \(t\)。 Sol 考虑将边从大到小插入图中。 注意到当前边只能对起点造成贡献。 复杂度 \(O(n \times \max\{n, m\})\) Code #incl 阅读全文
摘要:
题意 给定一棵 \(n\) 个节点的线段树。 任意黑白染色,求每个点被染成黑色且黑色点组成连通块的方案数。 Sol 考虑换根dp,钦定当前点作为根节点。 \(f_i\) 表示当前子树内的方案数。 \(g_i\) 表示子树外的方案数。 \(f\) 的转移显然是 \(f_u = \prod f_v + 阅读全文
摘要:
题意 给定 \(n\) 个物品,任意分组,\(i\) 与 \(j\) 物品在同一组贡献为 \(a_{i, j}\)。 求最大贡献。\(n \le 16\)。 Sol 考虑状压 \(f_i\) 表示 \(i\) 集合的最大贡献。 注意到枚举最后一个选的数不好转移,考虑用一个集合转移到另一个集合。 子集 阅读全文
摘要:
题意 给定 \(S \in ['>', '<']\)。表示排列 \(P\) 两点之间的大小关系。 求排列 \(P\) 的方案数。 Sol 排列方案,考虑 \(f_{i, j}\) 表示第 \(i\) 位的数在排列中排名为 \(j\) 的方案数。 当 \(S_i = '>'\),\(f_{i, j} 阅读全文
摘要:
题意 给定一个无向图,求路径长度为 \(k\) 的路径条数。 \(n \le 50\)。 Sol 考虑 \(dp\),设 \(f_{i, j}\) 表示从 \(i \to j\) 的路径长为 \(k\) 的方案数。 不难发现转移即为矩阵乘法。 直接快速幂即可。 Code #include <iost 阅读全文
摘要:
题意 求 \(1 \to n\) 中有多少个数是 \(d\) 的倍数。 \(n \le 10 ^ {10000}\)。 Sol 数位 dp,设 \(f_{i, j, 1 / 0}\) 表示第 \(i\) 位,膜 \(d\) 等于 \(j\),是否贴住上限。 转移是 \(trivial\) 的。 Co 阅读全文
摘要:
题意 给定一张大小为 \(2n\) 的图,求该图二分图匹配的方案数。 \(n \le 21\)。 Sol 状压板题。 设 \(f_T\) 表示 \(T\) 集合内的点被匹配。 直接转移即可。 Code #include <iostream> #include <algorithm> #include 阅读全文
摘要:
题意 给定长度为 \(n\) 的数列 \(a\)。以及字符串 \(S\)。 你需要在每一个数字之间插入一个字符 \(x \in S\)。 求使得最终表达式的值最大的方案。 \(S \in [+, -, *]\) Sol 考虑分讨。 当 \(|S| = 1\) 时,直接填入即可。 当 \(S \in 阅读全文