2023.6.9 NOI模拟赛总结
1.时间安排
7:30~8:30
T1:我以前互测出过类似的题,感觉随便做一下扫描线就是对的。
T2:博弈背景的最优化问题,直觉感觉有很大的可能博弈的胜败态是和1的数量有关的。
T3:基环树上的数据结构题,\(n^2\) 感觉就要分类讨论或者高斯消元这类的,可能不太好写,题目的操作是给一个点换父亲,感觉大概率要lct。
推了推轻松扫描线,但是要求历史版本和,后来想了想并不需要,在每个位置记录奇/偶数的出现次数,然后打奇/偶数一共加了多少次,扫描线的过程只需要维护区间奇偶翻转即可,轻松好写。
大概8点开始写,8点半写完轻松过大样例,计数题感觉不对拍也没问题就没对拍。
8:30~10:00
一开始没看大样例,写了个关于1的数量和大于1的数量的爆搜SG函数,9点半左右写完发现大样例完全不对,因为大样例是加密的,写了个解密函数,发现一个1都没有,而这是反常的,因为如果结论和1有关大样例不可能会是这样,后悔没有先解密大样例为时已晚。
搞T2搞了太久,就先打了个爆搜看T3了。
10:00~12:00
感觉基环树DP比较难写,就先画了10分钟写了个状压暴力留着对拍,每个点显然最多变换一次,所以状压是对的。
后来发现实际上不需要DP,但是仍然需要递推,因为是基环树所以在想要不要高消。
后来对着样例手算了一个方程组,居然发现无解,仔细一想显然不能高消。
自闭了一会才想起来环一定包含1,可以提前讨论1与 \(p_1\)的那个开关是否按下分类讨论,做两遍递推就好,复杂度还是单次询问线性的。
细节比较多,实现完大概已经11点半了,不过好在能拍上。
想写树形态不变的分,但是目测是个DDP,需要树剖维护矩阵乘法这类的,估计时间是不够用的,就摆了。
result:
T1:100 T2:10 T3:30
2.总结
T2:
我居然没看出来是个K-nim……博弈白做了。
但是这题究极麻烦,看出来是个2-nim也只是其中的冰山一角。
K-nim的结论我们知道对于某个确定的状态,所有数字写成二进制后每一位的和对 \((k+1)\) 取模是0则先手必胜,但是这题还有一个子集的限制,子集启发我们使用线性基。
通过人类智慧,可以得到取出来的 \(a_i\) 线性无关是子集都先手必胜的充要条件,再通过人类智慧,得到从大到小加入元素就可以求出权值和最大的一组线性无关的向量。
因为这个线性基是三进制意义下的,所以需要高斯消元来完成"异或"操作。
这样做复杂度是 \(O(n^2log^2V)\) 的。
继续通过人类智慧可以得到这个线性基是可以拓展成权值线性基的,于是类似二进制的权值线性基贪心操作即可,复杂度 \(O(nlog^2V)\),因为数据水所以能过。
不太懂题解说能bitset压位优化三进制加法的操作,很神秘。

zyc/好闪,/拜谢zyc
T3:
逆天分类讨论题。
我考场上的递推是从叶子推到根的,可以轻松改成从根推到叶子,这样就不需要进行链式的更新,而变成了子树式的更新。
因为是子树,所以LCT就不要考虑了,LCT维护子树个顶个逆天,考虑用类似ETT的东西,维护森林的欧拉序。
考虑dfs时每个点进入时加一个左括号,退出时加一个右括号,就形成了一个自然的欧拉序。
那么换父亲就是把这个子树所对应的括号序列平移到新父亲的左括号后面。
对于1号点是特殊的,我们默认1号点没有父亲(从后续的答辩分讨可以认为1号点就是出题人),然后讨论1号点是否进行操作,建立两个splay来分别维护。
在查询时,我们需要先通过看 \(p_1\) 号点的操作状态来判断当前这棵splay维护的方案是否合法,再更新最小值。
然后就分类讨论就行了,完接撒花。
亿些平衡树的细节例如:
1 .如果想要访问某个值并且这个值会被懒标记影响,那就一定要先转到根再访问,为了不影响当前操作的根可以提前求出来。
2 .加前后各一个哨兵会好写很多。
3 .在切割掉某个子树前,最好先把父亲push_down一下,否则可能会产生神奇的错误。
4 .不管啥函数最好能push_down就push_down,别惦记那点常数。
复杂度 \(O(nlogn)\)。

浙公网安备 33010602011771号