2026.8.11 模拟赛
https://oj.gxyzh.com/d/hzoj/contest/6a45da774de4613bd328c409
| T1 | T2 | T3 | T4 | |
|---|---|---|---|---|
| 实际得分 | 100 | 50 | 20 | 40 |
| 期望得分 | 100 | 50 | 20 | 40 |
| 能力得分 | 100 | 100 | 100 | 40 |
这场打的比较区,不知道在干什么.
翻牌
中位数考虑二分是经典的:
我们需要大于等于 \(x\) 的数的个数大于等于 \(\frac{n+1}{2}\).
我们在 check 时需要最大化这个个数,由于是翻转一个区间,因此答案就是 原贡献+翻转贡献的最大子段和.
不知道为什么在 8:30 才想出来,中间还读错了一次题.
塔
场上认为是不可做的构造题,事实上是被切穿的简单 DP 题.
题目中给出的是关于差的信息,故考虑差分,记差分数组为 \(c\).
发现区间 +1 的操作就是专门给差分数组使用的,
因此,就转化成了:选取差分数组两个位置,分别 +1,-1,最终满足 \(|c_i|\ge d_i\) 的最小操作次数.
由于发现题目数据范围给出 \(\sum d_i\) 的范围,因此不难想到最终复杂度与其有关.
常见的复杂度与值域有关的做法之一是 DP,考虑 DP.
设 \(dp_{i,j}\) 表示前 \(i\) 个数满足,且留下 -j 的贡献给后面的数.
时间复杂度为 \(O(n\sum d_i)\).
图
需要惊人的注意力/输出方案找规律.
由于题目中给出节点度数不超过 \(3\),因此需要好好利用.
设有一个大小为 \(k\) 的联通子图,由于度数至多为 \(3\),因此在子图内部的边至多有 \(\frac{3k}{2}\) 条,但要使子图在红/蓝情况下均连通,需要满足边数至少有 \(2(k-1)\) 条.
我们解 \(\frac{3k}{2}\ge 2(k-1)\),得到 \(k\le 4\).
因此我们只需要暴力搜索大小不超过 4 的联通子图,时间复杂度为 \(O(n)\) 或 \(O(n\log n)\).
勇士斗恶龙
首先需要先解决 \(n\le 10^5\) 的情况.
考虑 DP,设 \(dp_{i}\) 表示在血量为 \(i\) 时的方案数.
有如下转移:
最终 \(dp_0\) 就是答案.
事实上我们将上面的转移反向(刷表改填表),即:
最终 \(dp_n\) 就是答案.
注意到 \(a_i\le 100,b_i\le 60\),这就说明转移中有许多重复的贡献,我们将这些贡献合并到 \(c_{i,j}\) 中,表示 \(a_x=i,b_y=j\) 的个数.
转移方程即为:
注意到,若 \(2^k|i\),则对于 \(j<k\),均有 \(2^j|i\).
因此考虑使用前缀和:\(d_{i,j}=\sum_{k\le j}c_{i,k}\).
转移方程即为:
其中 \(k\) 即为 \(\log \operatorname{lowbit}(i)\).
这样就解决了 \(n\le 10^5\) 的问题.
由于最终 \(n\le 10^{18}\),因此考虑矩阵优化.
对于 \(b_i=0\) 的情况,可以直接使用矩阵快速幂.
对于最终答案,由于我们的系数矩阵会收到 \(\operatorname{lowbit}(i)\) 的影响,因此考虑寻找 \(\operatorname{lowbit}(i)\) 的规律:
0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 4 ...
注意到:对于 \(\le k\) 的 \(\operatorname{lowbit}(k)\) 信息是可以使用 \(\operatorname{lowbit}(k-1)\) 进行拼接的.
因此我们只需要倍增预处理 \(\operatorname{lowbit}\) 的信息即可.
最终时间复杂度为 \(O(\log n V^3)\).

浙公网安备 33010602011771号