[NOIP2023] 基本分题解
T1 词典
题目意思很简单,构造的策略也是显然的。
只需要让需要计算的字符串从小到大排序,不需要的从大到小排序即可。
但是字符串的比较是 $O(n)$ 的,如何优化呢?
因为字典序是越靠前的字符价值越高,我们只需要把每个字符串的从小到大排序和从大到小排序抽象为最大字符和最小字符即可。
T2 三值逻辑
注意到题目给出的初始与结束状态一样其实是非常强的条件。
这意味着如果我们给一个变量赋值,在它的父亲(直接或间接给它赋值的变量)和子孙(直接或间接被它复制的变量)有 $U$ 那么它就一定是 $U$。
问题暂时转换成了如何判断一个节点一定是 $U$,有这样的观察:
- $x = \neg x$
- $x = U$
这样的结构不难让我们想到用并查集维护。
建立这样的模型:用正的较大值和负的较大值分别表示 $T,F$ 注意要求是他们的绝对值相同以保证可以用符号转换。由于 $U$ 取反后仍然是 $U$,所以让 $U=0$。
有了这些作为元素的基础值以后,用并查集模拟题目描述的赋值过程即可。
但是关于并查集还有一个小问题,就是当我们出现了判定为 $U$ 的性质1时,如果存在了反复走 $x$ 和 $\neg x$ 的情况,就会导致并查集无限循环导致错误。这时候的解决方案也非常简单,就是像传统的搜索一样设立一个标记数组即可。
我们用 $vis[x]$ 表示是否经过了 $\neg x$,这样就可以及时找到并查集中的环。
最后只需要把所有根节点为 $U$ 的变量统计即可。
T3 双序列拓展
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 祝馀宫!
评论




