Loading

摘要: 设 \(f_{i, j}\) 为目前有 \(i\) 个人,血量最高为 \(j\) 的方案数。那么我们 DP 就是在倒着做这个过程,每次枚举新增几个人即可。 代码: #include <bits/stdc++.h> using namespace std; #define int long long 阅读全文
posted @ 2025-11-13 20:16 Alexande 阅读(4) 评论(0) 推荐(0)
摘要: 从大到小排序,假设是第 \(i\) 列我们就从第 \(i\) 行开始填,如果不够填到上面去,你注意到此时必定会有一个 \(0\) 将上下两部分隔开,这就说明了每一行不可能相同。 阅读全文
posted @ 2025-11-13 16:25 Alexande 阅读(5) 评论(0) 推荐(0)
摘要: 首先如果一个数要搞两次操作一定是先除后减。 从大往小排序,枚举到底多少个数使用了两次操作,你发现剩下的数,令第一个 \(\ge b\) 的点为 \(p\),那么一定是一段除 + 一段减 + 一段除,且一段减必定包含 \(p\),我们预处理一个前缀最大和后缀最大即可。 阅读全文
posted @ 2025-11-13 15:08 Alexande 阅读(7) 评论(0) 推荐(0)
摘要: 开始犯唐了。 首先建 trie,然后发现单一的 \(x\) 是好算的,我们只需要求出 trie 上每个结点的贡献即可。 首先发现每往下一位,如果 0/1 都有显然会分开,否则一定都朝一个方向走,我们只需要计算后面的贡献,因为前面显然都是 0。 比较麻烦的限制是不能超过 \(M\) 这就给了我们向下拆 阅读全文
posted @ 2025-11-13 10:36 Alexande 阅读(8) 评论(0) 推荐(0)
摘要: 从整体的角度想你就祭了,得从前缀的角度思考。 思考让一个前缀合法的最小操作次数,有一个很显然的结论是,我们每次将一个元素修改为序列中没有出现过的元素一定不劣。 假设我现在加入一个 \(a_i\),那么出现不合法的情况只能是 \([j, i]\) 这个子区间不合法,令 \(j\) 为最大值,那么此时我 阅读全文
posted @ 2025-11-13 10:09 Alexande 阅读(7) 评论(0) 推荐(0)
摘要: 这个问题看起来就不是很可做的样子,这题做法也比较非人。 首先考虑折半搜索,搜索出前 \(15\) 位的值和后 \(15\) 位的值,然后发现分别 popcount 后其差分数组对应位置和为 \(0\),用一个哈希存储即可。 阅读全文
posted @ 2025-11-13 08:39 Alexande 阅读(6) 评论(0) 推荐(0)