随笔分类 - 比赛总结
摘要:题面 & 题解 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 区间 原区间范围很大, 考虑离散化. 显然, 产生贡献的情况在离散化后, 分成一块一块的. 对于所有区间的左右端点离
阅读全文
posted @ 2025-01-04 16:29
Steven1013
摘要:题面 & 题解 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\). 你现在想要他拿最少的硬币, 所以需要向里面添加硬币. 求必须添加的最少数量.
阅读全文
摘要:题目 & 题解 T1 思路 考虑先将原序列的逆序对个数求出来, 因为 \(a_i \le 5000\), 直接用一个桶统计即可. 再考虑将序列 \(a\) 拓展 \(k\) 次以后, 对于 \(a_{i+n}\) , 在上一段序列中的逆序对个数可以统计出来, 同理拓展到 \(a_{i+kn}\) ,
阅读全文
摘要:题面 & 题解 T1 算法 区间动态规划. 思路 考虑两个人在一轮中的操作, 先手(执行删除操作的人)希望得分最小化, 后手(执行取数操作的人)希望得分最大化. 显然有如下转移方程: \[f_{l,r} = \min^r_{i=l} (\max(sum(l,i-1)+f_{i+1,r},sum(i+
阅读全文
摘要:题目 & 题解 T1 算法 贪心. 思路 分类讨论. 对于 4 次比赛均参加了的账号, 其一定是真人. 对于参加了 3 次比赛的账号, 如果他有小号, 那么小号最多是只参加了该账号没有参加的那一场比赛的一个账号. 对于参加了 2 次比赛的账号, 假设他只参加了 1, 3 这两场比赛, 那么他最好与恰
阅读全文
摘要:题面 T1 诈骗题, 考虑贪心. 容易发现一个合法的方阵每一行或者每一列一定形如 "ABAB..." 或者 "BABA...". 那么可以对横行和纵列分别进行贪心. 最后取 \(\max\) 即可. 时间复杂度 \(\mathcal{O}(n^2)\). #include "iostream" us
阅读全文
posted @ 2024-11-15 20:21
Steven1013

浙公网安备 33010602011771号