Loading

6.15 考后总结

时间安排

7:10--7:30
读题,T3感觉是个典题。
7:30--10:00
T1,可以线段树上二分,删除操作可以用线段树分治消掉,这样是 2log 的。暂时不知道怎么降到单 log ,先这样写。卡常。
对拍,没拍出什么问题。
10:00--10:10
T2,看一眼 T2,发现暴力好像不太好写。先写 T3.
10:10--12:00
T3,感觉是典题。建立出正反 sam ,正反 sam 之间点是对应的,对 fail 树树剖,每个节点分别开三个线段树存贡献,算一下就行了。其中一个线段树可以换成树状数组。然后算一下空间发现开不下了,于是把一个开点线段树换成 splay 。
这样是双 log ,4s 还是能过的。
码,然后过掉样例,然后拍出问题,调不出来。

回顾反思

T1:
关键是对 max() 函数的处理。
赛时拘泥于对其二分答案了。
另一种思路是套路两者大小关系。
也是很经典的思路。

T2:
本质是定义一种 FWT ,每一位是不变、or、and、xor 其中一种。
然后我今天才知道 FWT 是按位计算的,且 FWT 是可以只对其中选取的每一个位做计算的。
随意到了对应的位就用对应的 FWT 就行了。
杂糅到一块,分类讨论。
代码

T3:
思路和正解没差。
唯一区别是正解把树剖+线段树换成了全局平衡二叉树,2log变1log。
经典的代码难度换时间。
不过2log就能过。
实现方面,赛时有些东西写复杂了。
比如这里正 sam 唯一作用就是求两个前缀公共后缀,与其求 fail 树 lca ,不如直接 hash 二分。省一个 sam 。
然后是 splay 的部分,本质是用来求出现在这个结点的串的贡献,由于不强制在线,可以离线下来对每个结点分别计算一下,用树状数组就可以了。
感觉写了些不必要的东西,堆到一块整整 14k ,极大地增加了出错概率。
精简以后就好写也好调一些了,虽说还是有 8k 吧。

posted @ 2023-06-15 18:53  Cafard  阅读(12)  评论(0)    收藏  举报