随笔分类 - 比赛总结
摘要:C. 环上合并 zcy 讲的好. 思路 先考虑一下特殊性质 \(a_i \le a_{i + 1}\). 动手模拟一下可以发现, 对于第 \(2 \sim n - 1\) 个数, 我们需要使用 \(n - (\)该数出现次数\()\) 次操作; 而对于第 1 个和第 \(n\) 个数, 则需要 \(
阅读全文
摘要:题面 & 题解 T1 题面让我们求一个排列 \(p\), 使得 \(a_i \oplus b_{p_i} = x\), 其中每一个 \(x\) 均相等, 最后升序输出每一个 \(x\). 不难发现, \(x\) 只可能是 \(a_1 \oplus b_i\). (当然, \(a_1\) 可以是序列
阅读全文
摘要:题面 & 题解 T1 原题链接 算法 树的直径, 贪心. 思路 考虑每一颗树, 它的最长链即为它的直径. 题目中输入一张图, 且保证无环, 那么可以考虑在每一颗树中求出直径. 最后将这些树拼起来即为最长链的长度. #include "iostream" using namespace std; na
阅读全文
摘要:题面 & 题解 T1 算法 概率, 期望. 思路 根据期望的线性性, 可得第 1 堆石子被取走的期望时间 \(\displaystyle E(t) = 1 + \sum_{i = 2}^n P_i\), 其中 \(P_i\) 指的是第 \(i\) 堆石子在「第 1 堆石子被取走前」取走的概率. 注意
阅读全文
摘要:题面 & 题解 T1 算法 区间 dp. 思路 int dfs(int l, int r, int x) { if (l > r) return 1; if (~f[l][r][x]) return f[l][r][x]; if (a[l] < x) return f[l][r][x] = dfs(
阅读全文
摘要:题面 T1 算法 动态规划, 树状数组. 思路 发现原问题其实就是一个二维偏序问题, 所以可以先按原串字典序排序消去一维的限制. 令 \(f_i\) 表示从 \(1 \sim i\) 钦定选第 \(i\) 个的最大答案, 那么有转移方程 \(\displaystyle f_i = \max_{j <
阅读全文
摘要:题面 & 题解 T1 思路 通过打表可以发现, 当我们在最前方放 \(k - 1\) 个 \(1\), 再在后面一堆 \(0\) 的中间放一个 \(1\) 一定是最优的. 严格证明一下. 将数组做前缀和, 令前缀和中 \(1\) 的个数为 \(X\), \(0\) 的个数为 \(Y\), 那么答案即
阅读全文
摘要:题面 & 题解 T1 原题链接, 感觉没有紫. 算法 树状数组, 数学. 思路 若对于每一个矩形来考虑, 我们需要 \(\mathcal{O}(n^4)\) 地枚举每一个矩形, 没有太大的优化前途. 换个角度, 我们对于每一个点依次进行考虑. 如果该点是作为一个子集的一个元素, 那么这样的子集一共会
阅读全文
摘要:题面 & 题解 T1 思路 首先可以处理出每对括号的位置. 考虑怎么处理每对括号. 对于相邻的几对括号中的任意一对, 它可以选择的方案数为 \((左侧对数 + 1) \times (右侧对数 + 1)\). 那么我们只需要从左到右扫一遍, 记录一下每个连通块内的括号数量即可. 在实现上, 因为需要做
阅读全文
摘要:题面 & 题解 T2 算法 动态规划, 博弈论. 思路 假设梦梦不能操作, 我们可以用动态规划求出前后缀的最大子段和, 这是 \(\mathcal{O}(n)\) 的. 具体来说, 令 \(pre_i\) 表示以 \(i\) 结尾的最大子段和, \(premx_i\) 表示 \([1, i]\)
阅读全文
摘要:题面 & 题解 T1 做题做少了导致的. 算法 并查集, 组合数学. 思路 首先考虑什么情况下答案一定是 0: 若对于第 \(i\) 列和第 \(n - i - 1\) 列的和 \(> 2\), 那么就一定无解. 在分类讨论下: 第 \(i\) 列和第 \(n - i - 1\) 列的和 \(\le
阅读全文
摘要:题目链接: https://files.cnblogs.com/files/blogs/833333/CW1018.zip?t=1729247210&download=true T2 区间 原区间范围很大, 考虑离散化. 显然, 产生贡献的情况在离散化后, 分成一块一块的. 对于所有区间的左右端点离
阅读全文
摘要:题面 & 题解 T1 算法 贪心, 数学, 高精度. 思路 根据贪心, 对于两个数 \(A, B\), 我们一定会从高位到低位从大到小地填数. 考虑填法, 设 \(A\) 的前缀为 \(a\), \(B\) 的前缀为 \(b\), 将要填入的数为 \(c\). 如果将其填入 \(A\), 那么答案为
阅读全文
摘要:题面 & 题解 T1 算法 折半搜索. 思路 因为 \(a, b \le 10^{11}\), 直接搜索肯定不行, 考虑折半然后合并. 搜索是简单的, 怎么合并呢? 假设左半部分是 \(a\), 右半部分是 \(b\), 因为要满足是 \(x\) 的倍数, 所以 \(a \times 10^k +
阅读全文
摘要:题面 & 题解 T1 算法 二分, 贪心. 思路 假设最终的平均数为 k, 那么我们一定会贪心地将所有 \(< k\) 的数选进去, 然后 \(> k\) 的数肯定会贪心地选若干个最小的. 选择的一定是一段前缀, 具体地, 将数组排序, 枚举一个前缀 \([1, i]\), 假设选择其中的所有数,
阅读全文
摘要:题面 & 题解 T1 算法 树形 dp. 思路 由于给定的仇视关系为一棵树, 所以我们可以考虑在这颗树上进行 dp. 考虑设 \(f_{u, i}\) 表示当前枚举到第 \(u\) 个人, ta的烟花从 \(l_i + i\) 开始定制的最小仇视值. 那么就有以下转移方程: \[f_{u, i} =
阅读全文
摘要:题面 & 题解 T1 算法 背包, 动态规划. 思路 考虑到 \(w_i \le 1000\), 可以得到状态 \(f_{i,j}\) 表示到第 i 个, 已经有 j 能力的最大精彩度. 然后就是正常 01 背包了. 最后将两序列相同的 j 合并, 最后取最大值即可. 时间复杂度 \(\mathca
阅读全文
摘要:题面 T1 先贴个暴力代码. #include "iostream" #include "algorithm" #include "cstring" using namespace std; constexpr int N = 2e3 + 1, M = 4e5 + 1; inline int rea
阅读全文
摘要:题面 & 题解 T1 构造题. 这篇写的很好, 我就是听他给我讲懂的. %%% #include "iostream" #include "string" using namespace std; constexpr int N = 1e5 + 10, mod = 1e9 + 7; int n, j
阅读全文
摘要:又要熬夜. A. Greedy Monocarp 题意 你有 \(n\) 个箱子, 每个箱子最初有 \(a_i\) 个硬币. 现在有一个人, 他会贪心地按硬币多少从大到小拿箱子, 最终使得总共拿取的数量至少为 \(k\). 你现在想要他拿最少的硬币, 所以需要向里面添加硬币. 求必须添加的最少数量.
阅读全文