2026年NOICA联盟-NOIP模拟赛(十二)

改题

A. 刺客(assassin)

tangbi 贪心直接做。

B. 法与律(fa)

题目描述

你有所有长为 \(n\) 的,字符集为 \(0\sim 9\) 的字符串。给出 \(m\) 个无序数对,如果一个字符串的某相邻两个字符出现在了数对里,你可以选择交换这两个字符。

你需要选出一个最大的集合,使得集合内的任意字符串无法通过交换变成集合内另一个字符串。

做法

称可以互相转化到的字符串的极大集合为一个等价类,问题相当于求等价类的个数。考虑给每个等价类设置一个代表元,那么就转化成统计代表元的个数。

可以将一个等价类中字典序最小的字符串作为代表元,现在通过 dp 统计代表元的个数。一个自然的想法是设 \(f_{i,j}\) 表示考虑从高到低前 \(i\) 位,第 \(i\) 位为 \(j\) 的代表元个数。但是这样局限于相邻两个位置,如果有跨越三个位置的交换就不行了。比如串 312,无序数对为 \((1,2),(2,3)\),只交换 \((1,2)\) 会使字典序变大,但是可以通过交换变成 213 使字典序变小。

发现这个 dp 本质是第 \(i\) 个位置被限定了一些不能填的数(如果填了,可以通过交换使字典序变小),而错的原因就是记录的太少了,有些不该统计的却统计了。由于字符集很小,考虑另一个 dp:设 \(f_{i,S}\) 表示考虑前 \(i\) 个数位,第 \(i\) 个位置不能填的数集为 \(S\),前 \(i-1\) 位的代表元个数,设 \(val1_u,val2_u\) 分别表示小于/大于 \(u\) 的与 \(u\) 有连边的数的集合,转移如下:

\[f_{i+1,(S\cap val2_u)\cup val1_u}\leftarrow f_{i+1,(S\cap val2_u)\cup val1_u}+f_{i,S} \]

转移的含义是,枚举第 \(i\) 位是 \(u\),如果下一位和 \(u\) 不能交换,那一定可以填。现在考虑下一位与 \(u\) 有连边的,如果下一位小于 \(u\),那交换这两个数后字典序就变小了,所以下一位的不能填的数的集合里一定有 \(val1_u\)。对于大于 \(u\) 的数,能不能填取决于之前的限制。

最后统计答案就是对所有 \(S\) 中 \(0\) 的个数与 \(f_{n,S}\) 的乘积求和。

时间复杂度是 \(\mathcal O(2^{\sum}\cdot\sum\cdot n)\),要剪枝,只对非零的位置转移出去。

C. 序列(sequence)

简单 dp 优化。

D. 冬(winter)

首先对每个询问能够 \(\mathcal O(n)\) 得出答案。

然后 \(c\) 变大的时候,答案递减。

然后答案只有 \(\mathcal O(\sqrt n)\) 种,因为对于 \(c\leq sqrt n\) 的,只有 \(\sqrt n\) 种数。对于 \(c>sqrt n\) 的,答案的下界是叶子数,上界是叶子数加 \(\dfrac{n}{c}\),所以答案种类数不超过 \(\sqrt n\)。

有了这些性质就可以分治解决,先计算出 \(c=1,n\) 的答案,然后每次计算 \(mid\) 处的答案,如果当前递归区间的左右端点答案相同,就说明这个区间内的答案都和两端点答案相等。

时间复杂度 \(\mathcal O(n\sqrt n)\)。但是 dfs 递归和 vector 常数太大了,有一个技巧是利用 dfn 序代替递归。

具体来说就是记录下来每一个点被访问的时间戳 dfn,再记录某个时间那个点被访问 id,由于儿子的时间戳一定大于父亲,所以直接 for 循环从后往前枚举,计算当前点答案并贡献到父亲。这样常数会大幅减小,可以通过。

下面证明询问 \(c\) 的答案上界为叶子数加 \(\dfrac{n}{c}\)。

考虑对树长链剖分,只考虑长链,则一条长链的答案贡献为 \(\lceil\dfrac{len}{c}\rceil\leq \dfrac{len}{c}+1\)。而支链的只会让长链的答案变小,不改变上界。求和之后就是叶子数加 \(\dfrac{len}{c}\),因为长链个数等于叶子个数,长链长度之和等于 \(n\)。

trick 总结

  • 一个等价类只统计代表元。

  • 答案单调、计算全部 \(\to\) 分治。

  • dfs 递归转循环。

  • 做题要思考全面,多想想特殊情况。

  • 观察数据范围,是否有特殊的地方,反常的小?非负?可能为 \(0\)。

  • dp 难以优化的时候考虑转化更简单的定义方式。

  • 观察答案的范围。

posted @ 2026-10-16 08:27  Tanliu  阅读(25)  评论(0)    收藏  举报