2024.10.23
Last Update:
Word Count:
Read Time:
Day -3
最近都不知道写什么题···
啥也不会啥也不想写···
请注意,以下有大量口胡内容。
总结一下最近写的杂题
[湖南集训] Clever Rabbit
首先手玩样例,可以发现答案非常少。
然后打了一个小表,发现答案确实非常少。
因为 ,所以考虑打表。
这里有一个性质:如果两个数字构成的可重集相同,则 值一样。
所以可以直接枚举集合,一共有 个。
然后高精算一下答案,把表打出来即可。
分数统计
无聊题。
询问一前缀和,询问二离线下来回滚莫队,询问三 ST 表。
没删 define int long long
被卡空间,导致没一遍过,气。
[HEOI2014] 大工程
看到保证关键点总数想到虚树。
建完虚树以后就是个简单树形 dp。
询问一就是经典的 。
做法是把贡献拆成每条边的贡献,统计每条边的经过次数。
询问二三就是树上最短路径长和树的直径。
注意虚树上边的边权是什么。
1 |
|
[SCOI2016] 美味
异或问题基本就三个方向:按位考虑,01trie,线性基。
如果没有这个加 ,那这是可持久化trie模板。
upd:可持久化trie好像也能做?不太会,还是按位考虑好想。
但现在有 ,所以只能按位考虑。
我们从高位到低位贪心。
设前面位累计的答案为 ,然后考虑当前位情况。
设当前考虑到第 位。
若当前位 位为 1,则我们希望 当前位为 0。
那么 。
若当前位 位为 0,则我们希望 当前位为 1。
那么 。
如果这一位能找到合法的 ,那么 就加上 。
但这为什么是对的?为什么不会在低位的区间里找一个合法的 ,但它从未出现在高位的区间里过?
如果你仔细想,你会发现如果高位有一位选到了合法值,那么低位的区间会变小。
也就是说,区间大小是单调不增的。
那么如果你在低位的区间里找到了一个合法值,那么它一定也出现在高位的区间里过。
那么现在问题变为了序列上在 内,值域在 内的信息。
因为要求在线,所以需要主席树上区间二分。
当然树套树也行,但复杂度两个 ,太劣了。
如果题目能离线,那么莫队+值域分块一般也能做。
复杂度
1 |
|
[SDOI2013] 森林
看到链上 kth 想到主席树,看到动态加边想到 LCT。
但这俩没法同时维护。
所以考虑每个点维护一颗主席树,然后合并时启发式合并。
然后把链上 kth 做一下树上差分,同时查四颗主席树然后合并答案即可。
但有个问题,怎么动态求 lca?
维护 LCT 即可。
当然也可以倍增,在启发式合并时重构倍增数组即可。
动态 lca 模板:DYNALCA - Dynamic LCA
不会写 LCT 了,悲。
[HNOI2015] 接水果
树套树和整体二分我都不会啊?只能写无脑莫队了。
查 kth 直接值域分块。
注意:在一条链的两个点都被加进来时,这条链的权值才能算进来。
没了。
upd1:补题的时候 20 分钟写完,真的很好写啊,吊打同学写的整体二分了,还得调半天。
upd2:唐,这个莫队的复杂度错完了,竟然能让我草过去,大家还是写正解整体二分吧。
upd3:莫队真了。
刚才那个莫队假的原因是一个点上会挂一堆路径,你这一个点遍历多次就死掉了,复杂度变成 。
所以我们把一个点展开成多个点(每挂一条路径就多一个点),这样新序列长度是 的。
然后把询问的区间对应到这个新序列上,再进行莫队,复杂度就真了。
代码以后补。
upd4:莫队又死了。
因为树上莫队需要考虑 ,所以可以构造 被拆成一堆点,那么你每次还是得跑这一堆点,就死了。
1 |
|
[SHUPC 2024] 原神,启动!
设 表示第 个被攻击的次数,那么列出方程应该长这样
然后高斯消元解就完事了。
注意是在模意义下解高斯消元,所以除法要注意。