NOI、APIO 模拟赛报告 1

NOI、APIO 模拟赛报告 1

2025NOI模拟1

  1. 发光虫(light)

    二份答案转成二分图判定,问题在于连边是 \(O(n ^ 2)\) 的。

    容易发现其连边是区间连 + 单点插入的形式,随便用可持久化数据结构维护即可。

    也可以根号重构,jjdw 写了。

  2. 跑步 (runplus)

    首先会一下 \(n ^ 2 / n ^ 2 \log n\) 暴力和链,暴力可以做 dij 或 dp,链可以二分分界点。

    考虑上树,先建虚树,虚树上的点暴力做,链的分界点可以倍增,对于链上挂的非关键子树一定要先跳到链上,作为权值扔到链上处理即可。

    总之就是一堆倍增瞎维护就行了。

  3. 梦 (dream)

    首先枚举 \(\mathrm{lca}\),设 \(f_{u, d}\) 表示 \(i\) 子树内深度为 \(d\) 的最大的 \(b\)\(g_{u, d}\) 表示最大的 \(c\)

    暴力做就是 \(dp_{u} \gets \max_{i = d - k} ^ {d + k} \{f_{x, i} + g_{y, d}, g_{x, i}, + f_{y, d}\}\),最后做一下子树 \(\max\) 即可。

    然后上一下长剖优化,即可 \(nk\),考虑到单次修改是 \(\mathcal{O}(1)\) 的,但是查询是区间 \(\mathcal{O}(k)\) 的,而 st 表恰可以 \(\mathcal{O}(\log n)\) 前缀插入,\(\mathcal{O}(1)\) 查询,上 st 表即可做到 \(\mathcal{O}(n\log k)\),jjdw 说单调队列可以线性,不太会。

2025NOI模拟2

  1. 游戏

    容易发现,对于 \(a_{i - 1} \ge a_{i} \le a_{i + 1}\),先删掉 \(a_{i}\) 一定不劣,具体的就是考虑若先删掉 \(a_{i + 1}\) 这次贡献一定不如删掉 \(a_i\),而留下 \(a_{i - 1}, a_i\) 对右边的贡献一定不如 \(a_{i - 1}, a_{i + 1}\)

    然后就是单峰的了,首先要是不删掉峰的话一定是从大到小依次删,每次判断一下是删掉峰还是删掉一边更优即可。

  2. 专家

    赛时能做出这个也是神人了。

    发现难点在于找到加法,其实形似下图建链

    我们钦定 \(1, 2, 3\) 分别选 \(1, 2, 3\), 这样 \(4: (3, 1), 5: (1, 2), 6: (2, 3)...\),容易发现其只能是前面一段选第一个数,后面一段选第二个数,后一段可以为空,所以方案数是 \(len + 1\) 的。

    于是我们构造出了加法,在链上挂点并且连上三元环中链点能选的点其中之一即可让链在选这个点时贡献 \(\times 2\),通过一条边可以钦定链的结尾在 \(x\) 之前,二进制做即可。

    如果没有发现加法,也可以暴力打出所有数的表,具体看 原题 题解。

  3. HZTG3727. 平衡

    神秘题。

    设字符串中 \(0\) 的个数为 \(k\),并设 \(0\) 的权值是 \(n - k\)\(1\) 的权值是 \(-k\), 有总权值 \((n - k)k - k(n - k) = 0\)

    设长度为 \(l\) 的子串中有 \(p\)\(0\) 的个数是 \(r\),其余 \(n - p\) 个是 \(r + 1\),则有 \(pr + (n - p)(r + 1) = kl \to n(r + 1) - p = kl\)

    所以对于一个 \(0\) 出现次数是 \(r\) 的子串,其权值为 \(nr - kl = p - n\),对于出现次数是 \(r + 1\) 的子串,其权值是 \(n(r + 1) - kl = p\),注意到其子串区间是 \([-n, n]\), 所以所以前缀的极差不超过 \(n\),及前缀在 \([x, x + n]\) 之间。

    先考虑算 \(x = 0\),我们发现双闭不太好整,因为在前缀值为 \(k\) 是同时可以取 \(n - k\)\(k\),考虑能否缩紧一下这个区间。容易发现当值取到 \(-n\)\(n\)\(q\)\(0, n\),并且 \(q = 0\)\(r \gets r + 1\) 以后和 \(q = n\) 等价,所以只用分析 \(q = 0\) 即可。当 \(q = 0\) 时,所有子串的和相等,而串的总和是 \(0\),所以每个子串和一定是 \(0\),因此值不可能取到 \(-n, n\),即前缀区间是 \([x, x + n)\)

    这样一个前缀区间唯一对应一个串,考虑贪心循环构造即可做到 \(\mathcal{O}(n ^ 3)\),考虑到每次将 \(x \gets x - 1\) 时,只有达到最高的一步和其下一步会翻转,所以每次只修改这些点均摊即可 \(\mathcal{O}(n ^ 2)\)

    题解说答案串循环同构,考虑前缀和的循环构造不难理解。

2025多校冲刺冲刺APIO/清北营1

  1. 爱豆 T1

    考虑将图连成 DAG,容易发现其一定是个 DAG 且每个点的出度最多为 \(2\),考虑 \(m\) 很小,手玩出所有图简单写个容斥啥的求下系数即可。

    或者发现答案是一些 \(i ^ n\) 线性组合,于是用大样例可以直接高消出系数。

  2. 地牢 T2

    二分答案,然后流验证。

    赛事没时间想了,虽然是个流板子。

  3. 堆 T3

    先会一下 \(n ^ 3\),考虑枚举前 \(x\) 位和 \(a_i\) 一样,在枚举第 \(x + 1\) 位是什么。现在树上有一些点已经被填好了,且空着的一定是一些子树,子树有全部 \(> x\) 的限制,提前预处理出子树的方案数,最后按限制从大到小计算方案数即可。

    考虑复杂度上限枚举了第 \(x + 1\) 位是什么,我们施以单步容斥,求 \(> a_{x + 1}\) 的方案数,这样和其他的限制就一样了,一样做即可 \(n ^ 2\)

2025多校冲刺冲刺APIO/清北营2

  1. specie T1

    发现最多操作 3 次即可把所有点拿完,且最优解一定不会比三次多。

    考虑若一次可以拿完则一定是一次拿完,否则分讨是两次还是三次,两次则一定拿一个点使其不包含一个角然后在拿这个角,三次则一定是先拿一个点在拿两个角。

    考虑到价值函数是凸的,一次放置必然把所有能放置的都放上。证明不太难。

    以后不要在唐诗代码上修改了,真的不如重构。

  2. swap T2

    考虑若贡献只有 \(|p_i - p_j|\),其显然的下界是 \(\frac{\sum\limits_i |p_i - q_i|}2\),且能取到,具体来说就是每次交换一对 \(a, c\) 使得 \(a\to b, c\to d, d > a > c > b\)

    若贡献只有 \(C\),则其显然的下界是 \((n - cy)C\),其中 \(cy\) 是置换环个数,要取到这个下界的条件是每次交换同一个环内的点。

    对于每个置换环,\(|p_i - p_j|\) 可以独立取到下界,所以其总共的下界就是 \((n - cy)C + \frac{\sum\limits_i |p_i - q_i|}2\) 且能取到。

    考虑构造方案,考虑当前最大值 \(x\) 所在环,设 \(a \to x \to b\),若 \(a > b\) 我们直接交换 \(a, n\),否则有:

    • \(a\) 向前跳直到存在一个 \(a' > a\),交换 \(a, a'\)
    • \(b\) 向后跳直到存在一个 \(b_1 \to b_2, a > b_2\),交换 \(b_1, a\)

    容易发现其路径不会相交,所以两边同时走就可以用 \(len\) 步分离出一个长为 \(len\) 的环,\(len\) 一定不超过环长一半,所以复杂度为 \(\mathcal{O}(n\log n)\)

  3. sort T3

    首先想到离线扫描线用主席树维护 hash 在排序,若你恰好和我一样唐每个历史版本维护每个串的一位你就会发现最后的二分 hash 和主席树的结构很不适配,于是我们用每个历史版本维护一个串即可非常好适配。

    复杂度 \(n \log^2 n\),发现主席树只有单点修改和二分,加上排序的常数也不大,所以很轻松就跑过了。

    考虑优化,我们类似 SA 的倍增过程,每次拔掉主席树的一层叶子重新标号,主席树总点数是 \(n \log n\) 的,于是若上基排的话复杂度是 \(\mathcal{O}(n \log n)\) 的。

2025多校冲刺冲刺APIO/清北营3

  1. xor T1

    首先先将 \(n \mod \mathcal{lcm}(a, b)\)

    发现此时 \(|A \cap B| \in {0, 1}\),而 \(|A|, |B|\) 也有最多 \(1\) 的差别,且 \(|A|, |B|\) 同时取到最小是容易的。

    于是问题转化成了能否同时取到 \(|A|, |B|, |A \cap B|\) 的最小值,其等价于一个长为 \(a\),宽为 \(b\) 的网格,每次可以向斜上方走一格,碰到边界会传送到另一边,问走 \(n\) 步能否到达右上角的一个矩形里。

    类似欧几里得做即可。

  2. floyd T2

    考虑什么时候会算对 \((x, y)\) 的最短路,当且仅当存在一个 \(z < y\)\((x, z)\) 是对的且 \(z\)\(y\) 的最短路 DAG 上。

    直接上 bitset 就 \(\frac{n ^ 3} w\) 了。

  3. cluster T3

    将栈内两点连有向边 \(a \to b\),表示 \(a\)\(b\) 上。

    考虑链,发现若端点不是下面则可以直接做,否则考虑一个 \(a \gets x \to b\),则先将 \(x\) 移到一个空位以后就可以做 \(a, b\),最后做 \(x\) 即可。

    环做一次就是链了。

    细节很多,注意每次要选最优的做。

2025多校冲刺冲刺APIO/清北营9——交互版

  1. 多米诺 T1

    发现答案是关于 \(w, h\)\(n\) 次多项式,所以直接打表打出 \(n \le 14\) 的答案插两次值即可,注意 \(w, h < n\) 的点值是不能用的。

    也可以看 wang54321 的矩阵做法。

  2. 老虎坤 T2

    不是这也能敏感词汇?

    考虑到我们最后一定取完了最少一个老虎坤的所有颜色。

    若最后取完的老虎坤有至少一个颜色重复了,则一直不停取这个一定最优,我们判掉这个平凡情况。

    考虑若最后取的老虎坤没有重复颜色,则我们一定是在取到其有的颜色以后立刻取狂取它直到结束。

    进一步的,我们现在就是要在其他老虎坤上取到其的任意一个颜色。发现若我们先取 \(A\) 来删掉 \(B\) 中的颜色,事实上不如直接取 \(B\)。这也就说明我们最多只会取一个老虎坤来取到这个颜色。

    这样我们直接枚举最后取的老虎坤,瞎维护一下即可。

  3. 树 T3

    这个本质就是不存在一个虚树的左链长度 \(\ge m - 1\)

    因为是一个满二叉树,所以有一些限制。具体的就是其有左儿子就一定有右儿子,如果我们钦定其先向左走在向右走,将向左走的边赋值 \(1\),向右走赋值 \(-1\),则限制相当于是任意时刻值在 \([0, m - 2]\) 且最后走到 \(0\),容易发现一种走法和一种树双射。

    然后上反射容斥就行了,好像也可以从 dp 转移方程推出一样的东西。

2025多校冲刺冲刺APIO 11

  1. 变换 T2

    先将前后 \(k\) 个转化成向前 \(2k\) 个。

    先考虑如何判断一个 \(p\) 是否合法:

    我们考虑一个 \(dp_{s, c}\) 表示前 \(2k\) 位是 \(s\),当前比原串多 \(c\) 个。

    我们将 \(dp\) 的转移画出图来,发现其相当于是所有从 \(s = 0,c = 0\) 出发的转移到 \(s = 0\)\(c = 0\)

    也就是说我们将每次转移 \(c\) 的变化量作为边权,则相当于原图没有包含 \(0\) 的非 \(0\) 环。

    由于其是强连通的,因此相当于是图中没有非 \(0\) 环,相当于对每个边加上其加上反向负边权边后没有负环。

    考虑如何判断一个 \(p\) 前缀是否合法,我们发现其相当于是一些边的边权不确定,我们取其限制最小的边连边,判负环即可。

    暴力 \(spfa\)\(\mathcal{O}(nm)\) 的,但我们发现每条边都有反边,因此当一个点被更新了三次,则最短路至少减少 \(2\),此时原路返回即可。因此将判断条件改成 \(dis_0 < 0\) 即可 \(\mathcal{O}(m)\)

2025多校冲刺冲刺APIO 12

  1. medrcy T2

    题目十分启发我们连边。

    \(f(G)\) 表示图 \(G\) 最早有人离开的时刻,当 \(G\) 为菊花时答案是 \(1\)

    考虑一个人 \(x\) 所看到的图事实上是删掉了与 \(x\) 相连的边的图,所以 \(f(G) = \min\{f(G\setminus x) + 1\}\)

    发现 \(f\) 十分想最小点覆盖,我们定义当 \(G\) 没有边时 \(f(G) = 0\) 即可。

    朴素做时 \(2^n\),考虑更快一点,我们每次找到度数最大的点 \(x\),枚举其是否在最小点覆盖里,容易发现复杂度时 \(T(k) = T(k - 1) + T(k - deg_x) + 1\),我们发现当 \(deg_x \le 2\) 时是十分简单的,所以最后复杂度是 \(T(k) = T(k - 1) + T(k - deg_x) + 1\),轻松通过。

    笑点解析是 APIO 讲了这个题,但这个题是 APIO 前几天模拟赛,而现在已经是 APIO 后一个半月了。

  2. tree T3

    首先容易发现这是著名原题:Clannad 的历史版本和版,直接做即可通过。

    考虑如何不找原通过。我们将贡献拆成两部分:区间子区间的 \(lca\) 深度和,有多少个子树包含区间中的点(即为包含根链的虚树大小和)。

    第一个是不难的,我们维护区间推平历史版本和即可,直接矩阵轻松实现。

    第二个我们考虑当一个点不计入一个区间 \([l, r]\) 时,其子树内的点排序后一定是跨过了 \([l, r]\),可以抽象成矩阵加。

    我们直接 set 启发式合并维护所有儿子排完序的值,每次在 \(a, b\) 之间插入时做矩阵加,查询就是矩阵和。

    最后是 \(n\log n\) 次矩阵加,总复杂度是 \(n\log^2 n\)

posted @ 2025-03-31 11:03  xrlong  阅读(41)  评论(0)    收藏  举报

Loading