9.2
由于 8 月不知道在干嘛,直接从 9 月份开始。
[ARC122E] Increasing LCMs No FST
构造题是不可做的,这辈子都不可做的。
考虑到新放入的数仅与前面所有数的 lcm 有关,但直接将 lcm 作为状态不可行,于是可以考虑倒序构造,找到一个 x,使其他数的最大公约数 s 满足 lcm(s,ax)>s,这样之前的 lcm 不再是变量,可证得若有解必然可以这样构造出来。
至于转移,直接求 lcm 显然不行,考虑求 lcmi=x{gcd(ai,ax)},至于不超过 ax,若 <ax 则合法。
P11013 「ALFR Round 4」C 粉碎 FST=2
设 fi 为 ai 作为消去的一对中较前的一个是否可行,gi 为 ai 作为消去的一对中较后的一个是否可行,答案为 maxgi=1{i},转移直接乱搞即可。
9.3
P3642 [APIO2016] 烟火表演 FST=2
Slope trick.
Slope trick 常用于维护函数值为若干个一次函数构成的凸包的 dp 问题,具体而言,我们插入若干个拐点,使得两个相邻拐点间的斜率每次增加 1,若一次增加的斜率超过 1 则多放几个相同点,用数据结构维护即可得到答案。
对于本题,设 f(x) 为当前子树内时间均为 x 的最小代价,易得 f(x) 的图像为一个斜率单调递增的凸包,且斜率为 0 的区间的右侧的斜率恒为 1,利用这个性质用左偏树维护即可。
同时这道题让我发现了以前的左偏树板子写的不知道是什么东西。
9.4
P3292 [SCOI2016] 幸运数字 FST=3
异或最值选用线性基来处理,于是变成了求树上线性基,对于每个点求出根到这个点的链构成的线性基,并且尽量保留深度较深的点,查询时把端点线性基中深度不低于 lca 的基拿出来搞即可。
P10992 [蓝桥杯 2023 国 Python A] 最长同类子串 FST=3
二分 k 再 Hash 即可。
P8497 [NOI2022] 移除石子 No FST
好题,后面再写。
9.5
P10785 [NOI2024] 集合 FST=8
本周最唐的一集。
判断两个序列是否本质相同,可以直接想到 Hash+ 扫描线。然后我蒙了一个合法区间是单调的,但很快想了一个当时看不出来的假反例,把这个想法 ban 了,接着直接暴力 Hash,即动态维护无序集合套无序集合,卡了一天都没弄出来。
实际上单调的结论是对的,直接双指针即可。
9.6
P5406 [THUPC2019] 找树 No FST
如果说这道题让我知道自己压根没看懂FFT,那么本题再次刷新了我对FWT的认知。
FFT每次乘法之后项数会变大,所以反复点乘是一个非常小丑的行为。
FWT的定义域不会改变,故可以多次利用。
FWT对每一位的操作可看成两个数组成的向量乘上一个矩阵,同样也可以使得整个数组乘上一个大矩阵,因此可证得每一位的运算是互不干扰的,完全可以支持各位有各位的运算。
再看这题,我们考虑求出 v1⊕...⊕vn−1=x 时的生成树个数,而FWT后的方案数仅仅只是所有 ai,j,x 的积,直接矩阵树定理即可。
9.8
打了两场模拟赛,感觉脑子根本没在线。
9.9
P10774 BZOJ3563 DZY Loves Chinese P10778 BZOJ3569 DZY Loves Chinese II P10075 [GDKOI2024 普及组] 切割 FST=6
考虑给图中的所有边随机赋一个权值,使得对于任意 i,所有与其相关的边的边权的异或和为 0。
若不连通,则可将图划分为两个点集 S,T,使得所有 S 到 T 的边均被删除,对于这些边,他们的异或和显然为 0,于是用线性基维护即可。
9.10
作业压力上来了。
P3540 [POI2012] SQU-Squarks P1286 两数之和 FST=3
首先,可以发现,只要知道了最小值 a1,就可以推出整个数列。具体的,可以先得到 a2,a3,考虑数学归纳法,假设已经得到了 a1∼k,把他们组合出来的和从 b 中去掉,最小的就是 a1+ak+1,因此得证。
关键在于找到 a1。显然排序后 b1=a1+a2,b2=a1+a3,且 a2+a3∈{b3,b3...bn+1},暴力枚举再推出 a1 即可。
9.11
P11036 【MX-X3-T3】「RiOI-4」GCD 与 LCM 问题 FST=5
这个 gcd 感觉一点用都没有,不如直接令 b=1 消去。
于是转化为 a=lcm(c,d)−c−d。
显然右边那个东西可以表示任意一个奇数 x:x=lcm(2,x+2)−(x+2)−2。
若 a 为偶数,设 a=u2v,u 为奇数,那么 u=lcm(2,u+2)−(u+2)−2,即 a=u2v=lcm(2v+1,(u+2)×2v)−(u+2)×2v−2v+1。
值域显然是符合要求的。
P11037 【MX-X3-T4】「RiOI-4」上课 FST=7
显然数取得越集中越好,直接预处理处集中在 x 时对应的答案范围,询问直接二分到 x 再修修补补即可。
P4839 P 哥的桶 No FST
每次搜题都看得到这题,to annoying。
线段树 + 线性基即可,还是能过的。
原来我线段树可以码这么快。
P10833 [COTS/CETS 2023] 下 Niz No FST
考虑一个合法区间 [l,r] 该满足什么条件:
- 区间最大值为 r−l+1。
- 记 prei 为上一个 ai 出现的位置, nxti 为下一个 ai 出现的位置,那么 ∀i∈[l,r],prei<l∧nxti>r。
于是可以分治计算跨过 [mid,mid+1] 的区间,具体的,可以假设最大值在左边/右边,再记录区间最值及 pre,nxt 的最值即可判断。
9.12
P7451 [THUSCH2017] 杜老师 FST=2
乘积为完全平方数,也就是各质因子出现的次数为偶数。而求异或和为 0 又是线性基最擅长的。于是考虑用线性基维护质数集的奇偶性。
若区间长度很小,显然可以暴力插入 O(wπ2(n))。
若区间长度超过 2n,可证得每个出现过的质数的位置都能被填满,于是数个数即可。
对两部分根号分治就解决了。
[ABC216H] Random Robots No FST
考虑统计方案数再除以 2nk。
把时间当做 y 轴,那么每次可以只向上走一格,也可以斜向上走一格,求 k 条不相交路径的方案数,直接上 LGV 引理,即求所有排列的路径条数的和,分正贡献和负贡献。
考虑 dp,即选择 y1∼k 使得 (0,xi) 最终到了 (n,yi),设 fi,s,t 为 y 枚举到 i,前面的 i 中有些匹配了 xj,j∈s,排列奇偶性为 t∈{0,1} 的方案数。选择时转移的系数为 (i−xjn)。
9.13
P10857 【MX-X2-T6】「Cfz Round 4」Ad-hoc Master FST=4
神仙题,离线 sto @xhgua√。
既然题目给了一堆异或和,那么显然是要找几个数异或乱搞。
尝试把所有的 fi,k,i∈[1,n] 异或起来,就可以得到一个结论(设点 i 在二叉树中的真实深度为 depi)。
- ⊕i=1nfi,k=⊕i=1n[depi=k−1]wi
若 depi=k−1,显然从其出发的每条路径都可以找到唯一一条路径与之匹配,故 wi 对异或没有贡献。
若 depi=k−1,显然其到根的路径没法抵消,故只贡献了一次。
综上可得证。
于是我们就得到了除 0 外所有深度的异或和,要求根的值只需找到所有权值的异或和即可。
- 设 s=⊕k=1∧k=1(mod2)2h−2fu,k⊕fv,k,u,v 为任意两点,那么当 u,v 的距离为奇数时,s 为所有权值的异或和;当 u,v 的距离为偶数时,s 为 0。
当 u,v 的距离为奇数时,任意一个点到他们的距离要么是奇数,要么是偶数,故只算一次;当 u,v 的距离为偶数时,任意一个点要么没被记录,要么被计算了两次,故得证。