2024-9 记录

9.2

由于 88 月不知道在干嘛,直接从 99 月份开始。

[ARC122E] Increasing LCMs     No FST\color{Purple}\text{[ARC122E] Increasing LCMs\ \ \ \ \ }\color{Green}\text{No FST}

构造题是不可做的,这辈子都不可做的。

考虑到新放入的数仅与前面所有数的 lcmlcm 有关,但直接将 lcmlcm 作为状态不可行,于是可以考虑倒序构造,找到一个 xx,使其他数的最大公约数 ss 满足 lcm(s,ax)>slcm(s,a_x)>s,这样之前的 lcmlcm 不再是变量,可证得若有解必然可以这样构造出来。

至于转移,直接求 lcmlcm 显然不行,考虑求 lcmix{gcd(ai,ax)}lcm_{i\neq x}\{gcd(a_i,a_x)\},至于不超过 axa_x,若 <ax<a_x 则合法。

P11013 「ALFR Round 4」C 粉碎     FST=2\color{BBlue}\text{P11013 「ALFR Round 4」C 粉碎\ \ \ \ \ }\color{Red}\text{FST=2}

fif_iaia_i 作为消去的一对中较前的一个是否可行,gig_iaia_i 作为消去的一对中较后的一个是否可行,答案为 maxgi=1{i}\max_{g_i=1}\{i\},转移直接乱搞即可。

9.3

P3642 [APIO2016] 烟火表演     FST=2\color{Black}\text{P3642 [APIO2016] 烟火表演\ \ \ \ \ }\color{Red}\text{FST=2}

Slope trick.\texttt{Slope trick.}

Slope trick\texttt{Slope trick} 常用于维护函数值为若干个一次函数构成的凸包的 dp\texttt{dp} 问题,具体而言,我们插入若干个拐点,使得两个相邻拐点间的斜率每次增加 11,若一次增加的斜率超过 11 则多放几个相同点,用数据结构维护即可得到答案。

对于本题,设 f(x)f(x) 为当前子树内时间均为 xx 的最小代价,易得 f(x)f(x) 的图像为一个斜率单调递增的凸包,且斜率为 00 的区间的右侧的斜率恒为 11,利用这个性质用左偏树维护即可。

同时这道题让我发现了以前的左偏树板子写的不知道是什么东西。

9.4

P3292 [SCOI2016] 幸运数字     FST=3\color{Purple}\text{P3292 [SCOI2016] 幸运数字\ \ \ \ \ }\color{Red}\text{FST=3}

异或最值选用线性基来处理,于是变成了求树上线性基,对于每个点求出根到这个点的链构成的线性基,并且尽量保留深度较深的点,查询时把端点线性基中深度不低于 lcalca 的基拿出来搞即可。

P10992 [蓝桥杯 2023 国 Python A] 最长同类子串     FST=3\color{BBlue}\text{P10992 [蓝桥杯 2023 国 Python A] 最长同类子串\ \ \ \ \ }\color{Red}\text{FST=3}

二分 kkHashHash 即可。

P8497 [NOI2022] 移除石子     No FST\color{Black}\text{P8497 [NOI2022] 移除石子\ \ \ \ \ }\color{Green}\text{No FST}

好题,后面再写。

9.5

P10785 [NOI2024] 集合     FST=8\color{Purple}\text{P10785 [NOI2024] 集合\ \ \ \ \ }\color{Red}\text{FST=8}

本周最唐的一集。

判断两个序列是否本质相同,可以直接想到 Hash+Hash+ 扫描线。然后我蒙了一个合法区间是单调的,但很快想了一个当时看不出来的假反例,把这个想法 ban 了,接着直接暴力 HashHash,即动态维护无序集合套无序集合,卡了一天都没弄出来。

实际上单调的结论是对的,直接双指针即可。

9.6

P5406 [THUPC2019] 找树     No FST\color{Black}\text{P5406 [THUPC2019] 找树\ \ \ \ \ }\color{Green}\text{No FST}

如果说这道题让我知道自己压根没看懂FFT,那么本题再次刷新了我对FWT的认知。

FFT每次乘法之后项数会变大,所以反复点乘是一个非常小丑的行为。

FWT的定义域不会改变,故可以多次利用。

FWT对每一位的操作可看成两个数组成的向量乘上一个矩阵,同样也可以使得整个数组乘上一个大矩阵,因此可证得每一位的运算是互不干扰的,完全可以支持各位有各位的运算。

再看这题,我们考虑求出 v1...vn1=xv_1\oplus...\oplus v_{n-1}=x 时的生成树个数,而FWT后的方案数仅仅只是所有 ai,j,xa_{i,j,x} 的积,直接矩阵树定理即可。

9.8

打了两场模拟赛,感觉脑子根本没在线。

9.9

P10774 BZOJ3563 DZY Loves Chinese  P10778 BZOJ3569 DZY Loves Chinese II  P10075 [GDKOI2024 普及组] 切割     FST=6\color{Purple}\text{P10774 BZOJ3563 DZY Loves Chinese\ \ P10778 BZOJ3569 DZY Loves Chinese II\ \ P10075 [GDKOI2024 普及组] 切割\ \ \ \ \ }\color{Red}\text{FST=6}

考虑给图中的所有边随机赋一个权值,使得对于任意 ii,所有与其相关的边的边权的异或和为 00

若不连通,则可将图划分为两个点集 S,TS,T,使得所有 SSTT 的边均被删除,对于这些边,他们的异或和显然为 00,于是用线性基维护即可。

9.10

作业压力上来了。

P3540 [POI2012] SQU-Squarks  P1286 两数之和     FST=3\color{Purple}\text{P3540 [POI2012] SQU-Squarks\ \ }\color{BBlue}\text{P1286 两数之和\ \ \ \ \ }\color{Red}\text{FST=3}

首先,可以发现,只要知道了最小值 a1a_1,就可以推出整个数列。具体的,可以先得到 a2,a3a_2,a_3,考虑数学归纳法,假设已经得到了 a1ka_{1\sim k},把他们组合出来的和从 bb 中去掉,最小的就是 a1+ak+1a_1+a_{k+1},因此得证。

关键在于找到 a1a_1。显然排序后 b1=a1+a2,b2=a1+a3b_1=a_1+a_2,b_2=a_1+a_3,且 a2+a3{b3,b3...bn+1}a_2+a_3\in\{b_3,b_3... b_{n+1}\},暴力枚举再推出 a1a_1 即可。

9.11

P11036 【MX-X3-T3】「RiOI-4」GCD 与 LCM 问题     FST=5\color{Green}\text{P11036 【MX-X3-T3】「RiOI-4」GCD 与 LCM 问题\ \ \ \ \ }\color{Red}\text{FST=5}

这个 gcdgcd 感觉一点用都没有,不如直接令 b=1b=1 消去。

于是转化为 a=lcm(c,d)cda=lcm(c,d)-c-d

显然右边那个东西可以表示任意一个奇数 xxx=lcm(2,x+2)(x+2)2x=lcm(2,x+2)-(x+2)-2

aa 为偶数,设 a=u2va=u2^vuu 为奇数,那么 u=lcm(2,u+2)(u+2)2u=lcm(2,u+2)-(u+2)-2,即 a=u2v=lcm(2v+1,(u+2)×2v)(u+2)×2v2v+1a=u2^v=lcm(2^{v+1},(u+2)\times 2^v)-(u+2)\times 2^v-2^{v+1}

值域显然是符合要求的。

P11037 【MX-X3-T4】「RiOI-4」上课     FST=7\color{B}\text{P11037 【MX-X3-T4】「RiOI-4」上课\ \ \ \ \ }\color{Red}\text{FST=7}

显然数取得越集中越好,直接预处理处集中在 xx 时对应的答案范围,询问直接二分到 xx 再修修补补即可。

P4839 P 哥的桶     No FST\color{Purple}\text{P4839 P 哥的桶\ \ \ \ \ }\color{Green}\text{No FST}

每次搜题都看得到这题,to annoying。

线段树 ++ 线性基即可,还是能过的。

原来我线段树可以码这么快。

P10833 [COTS/CETS 2023] 下 Niz     No FST\color{Purple}\text{P10833 [COTS/CETS 2023] 下 Niz\ \ \ \ \ }\color{Green}\text{No FST}

考虑一个合法区间 [l,r][l,r] 该满足什么条件:

  • 区间最大值为 rl+1r-l+1
  • preipre_i 为上一个 aia_i 出现的位置, nxtinxt_i 为下一个 aia_i 出现的位置,那么 i[l,r],prei<lnxti>r\forall i\in [l,r],pre_i<l\land nxt_i>r

于是可以分治计算跨过 [mid,mid+1][mid,mid+1] 的区间,具体的,可以假设最大值在左边/右边,再记录区间最值及 pre,nxtpre,nxt 的最值即可判断。

9.12

 P7451 [THUSCH2017] 杜老师     FST=2\color{Black}\text{ P7451 [THUSCH2017] 杜老师\ \ \ \ \ }\color{Red}\text{FST=2}

乘积为完全平方数,也就是各质因子出现的次数为偶数。而求异或和为 00 又是线性基最擅长的。于是考虑用线性基维护质数集的奇偶性。

若区间长度很小,显然可以暴力插入 O(π2(n)w)O(\frac{\pi^2(n)}{w})

若区间长度超过 2n2\sqrt n,可证得每个出现过的质数的位置都能被填满,于是数个数即可。

对两部分根号分治就解决了。

[ABC216H] Random Robots     No FST\color{Black}\text{[ABC216H] Random Robots\ \ \ \ \ }\color{Green}\text{No FST}

考虑统计方案数再除以 2nk2^{nk}

把时间当做 yy 轴,那么每次可以只向上走一格,也可以斜向上走一格,求 kk 条不相交路径的方案数,直接上 LGVLGV 引理,即求所有排列的路径条数的和,分正贡献和负贡献。

考虑 dp,即选择 y1ky_{1\sim k} 使得 (0,xi)(0,x_i) 最终到了 (n,yi)(n,y_i),设 fi,s,tf_{i,s,t}yy 枚举到 ii,前面的 ii 中有些匹配了 xj,jsx_j,j\in s,排列奇偶性为 t{0,1}t\in\{0,1\} 的方案数。选择时转移的系数为 (nixj)\tbinom{n}{i-x_j}

9.13

 P10857 【MX-X2-T6】「Cfz Round 4」Ad-hoc Master     FST=4\color{Black}\text{ P10857 【MX-X2-T6】「Cfz Round 4」Ad-hoc Master\ \ \ \ \ }\color{Red}\text{FST=4}

神仙题,离线 sto @\text{@}xhgua\color{Red}\text{xhgua}\color{Yellow}{√}

既然题目给了一堆异或和,那么显然是要找几个数异或乱搞。

尝试把所有的 fi,k,i[1,n]f_{i,k},i\in [1,n] 异或起来,就可以得到一个结论(设点 ii 在二叉树中的真实深度为 depidep_i)。

  1. i=1nfi,k=i=1n[depi=k1]wi\oplus_{i=1}^nf_{i,k}=\oplus_{i=1}^n[dep_i=k-1]w_i

depik1dep_i\neq k-1,显然从其出发的每条路径都可以找到唯一一条路径与之匹配,故 wiw_i 对异或没有贡献。

depi=k1dep_i= k-1,显然其到根的路径没法抵消,故只贡献了一次。

综上可得证。

于是我们就得到了除 00 外所有深度的异或和,要求根的值只需找到所有权值的异或和即可。

  1. s=k=1k=1(mod2)2h2fu,kfv,ks=\oplus_{k=1\land k=1\pmod 2}^{2h-2}f_{u,k}\oplus f_{v,k}u,vu,v 为任意两点,那么当 u,vu,v 的距离为奇数时,ss 为所有权值的异或和;当 u,vu,v 的距离为偶数时,ss00

u,vu,v 的距离为奇数时,任意一个点到他们的距离要么是奇数,要么是偶数,故只算一次;当 u,vu,v 的距离为偶数时,任意一个点要么没被记录,要么被计算了两次,故得证。

posted @ 2024-09-02 13:48  luckydrawbox  阅读(24)  评论(0)    收藏  举报  来源