摘要: 分析 看到 \(n \leq 35\) 的数据范围就想到了 meet-in-middle。 先爆搜出对于 \(1 \sim \frac{n}{2}\) 和 \(\frac{n}{2} \sim n\) 两个下标范围内在模意义下所有的和。 然后用一个常见 trick,就是枚举第二个部分的和,然后匹配第 阅读全文
posted @ 2023-10-26 15:15 Kazdale 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 分析 很容易想到从 \(0\) 开始枚举 \(a_i \neq i\) 的位置个数一直枚举到 \(k\) 计算每种情况下的答案加在一起即为答案。 对于 \(k\) 确定的情况,\(a_i = i\) 的位置共有 \(C_{n}^{n-k}\) 种情况,剩下的位置要保证 \(a_i \neq i\)。 阅读全文
posted @ 2023-10-26 11:18 Kazdale 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 分析 容易想到可以枚举每个字母,分别求其最小 \(k\) 取 \(\min\)。 思考对于一个 \(k\),如何判其不合法。容易想到如果存在一个没有这个字符的长度大于等于 \(k\) 的子段,那么这个 \(k\) 就不合法。 那么我们就知道如何求最小合法 \(k\) 了。找到最长的没有这个字符的子段 阅读全文
posted @ 2023-10-26 10:34 Kazdale 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 分析 题意为选出最多的操作使机器人执行完仍停留在原地。 分为左右和上下两类,则每一类的可执行操作数都是操作次数最少的一种操作的二倍(因为正反操作都要执行才能抵消)。 直接统计每种操作的操作次数计算答案即可。 代码 #include <iostream> using namespace std; co 阅读全文
posted @ 2023-10-26 10:00 Kazdale 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 分析 因为一个数不可能同时大于并小于它两边的数,所以两种数的集合不存在交集。 所以分别扫一遍两种数的个数加在一起即可。 代码 #include <iostream> using namespace std; constexpr int MAXN(1000007); int a[MAXN]; int 阅读全文
posted @ 2023-10-26 09:18 Kazdale 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 分析 观察到题面是求最小极差,想到 two-pointers。 按 \(w_i\) 大小排序,然后发现一个子段的子段的答案肯定不优于原子段。 和CF1777C以及NOI2016区间一样,选取合法左端点然后选取最大合法右端点。 值得注意的是,本题要求首尾相接,所以为了避免选取的线段无交集,将 \(r\ 阅读全文
posted @ 2023-10-26 08:58 Kazdale 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 分析 注意到字符集大小很小,那么很容易就会产生回文,那么合法序列的种类就会比较有限。 思考对于不同长度而言合法序列的种类,显然长度为 \(1\) 时无回文,长度为 \(2\) 只要两个字符不同就无回文。 尝试扩展到长度为 \(3\) 时的情况,显然 \(s_1 \neq s_2\),\(s_2 \n 阅读全文
posted @ 2023-10-25 19:23 Kazdale 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 分析 看着感觉很不可做,因为第一个人走的方式有巨大的后效性。 但是发现 \(n=2\),那么第一个人走的方式一定是先在上面走一段,再在下面走一段(直接走下面视为先在上面走了 \(0\) 个数) 设第一个人在 \(x\) 处从第一行下去,那么第二个人能选择的数之和一定为第一行 \(x + 1\) 的后 阅读全文
posted @ 2023-10-25 16:58 Kazdale 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 分析 放桌子有两种放法,一种是上下放,一种是左右放,分别计算最小值取 \(\min\) 即可。 注意到原题使用的是平面直角坐标系,于是将原图顺时针旋转 \(90^{\circ}\),将下标表示方式与代码中下标的表示方式统一,相应的,左下角和右上角也变成了左上角和右下角。 代码 #include <i 阅读全文
posted @ 2023-10-25 16:08 Kazdale 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 分析 首先对于小于 \(6\) 的数答案一定是 \(15\)。 然后发现 \(6、8、10\) 分别是 \(3、4、5\) 的二倍,而且对于三种做法做一块披萨所用的时间都是一样的,所以只要一个数能被这三个数凑出来,最后的总用时就是这个数乘以做一块披萨所用的时间。 \(3、4、5\) 作为 \(3、3 阅读全文
posted @ 2023-10-25 15:32 Kazdale 阅读(185) 评论(0) 推荐(0) 编辑