「2024 May」做题笔记
令 \(\sum\) 为异或和。
首先我们只用询问 \(\mu_i\neq 0\) 的数,发现个数已经 \(< 0.n\) 了。然后继续这么想发现质因子集合相同的都是等价的。
能不能找出 \(b_i\) 表示质因子集合乘积为 \(i\) 的异或和呢?我们有 \(a_i=\sum_{(i,j)=1}b_j\),似乎不能直接莫反。但是注意到这里的值域都是 \(\mu\neq 0\) 的数,所以 \(a_i=\sum_{d|i,d|j}b_j\),不难发现一个 \(b_j\) 会贡献 \(2^{prime}\) 次,所以是等价的。令 \(g_d=\sum_{d|j}b_j\),\(a_i=\sum _{d|i}g_d\),同理可以直接反演 \(b_j=\sum_{j|d}g_d\),\(g_d=\sum_{i|d}a_i\)。
然后问题转化成每个等价类选一些数异或和为 \(b_i\),总个数为 \(n\)。
由于数据随机,可以 bitset dp,但是是随机选子集。更简单地,直接随机调整:每次随机一个等价类,再随机一个子集取反,若调整后答案更接近 \(n\) 就换。
线性基输出方案可以记录线性基中某个元素加入时异或的子集。于是就做完了。
狄利克雷卷积拆成独立的就行了。也可以根号分治。
好 tm 恶心的题。
先讲讲容易理解的 \(n^2\) 做法。本题可以转化为 \((x,y)\) 的对数,使得原图可以被划分为以一条 \(x\) 结尾和 \(y\) 开头的路径。画出这个图,假设固定 \(y\),看看 \(x\) 的答案是否能转移?发现只要 \(x+1,x+2,...z\) 是一条连续的链,且 \(x\rightarrow z+1\) 有边,那么 \((x,x-1)\) 可以转移到 \((z+1,z)\),所以设 \(dp_{i,0/1}\) 为是否能到 \((x,x+1)/(x+1,x)\)。
若原图 \(1\rightarrow 2\rightarrow 3\rightarrow...\rightarrow n\) 存在,那么答案为 \(\frac {n(n-1)} {2}\),否则一定存在 \(p\) 与 \(p+1\) 不相连,找到最小的。
那么必定在 \((p,p+1)\) 断开。考虑从这个点向左右转移。合并左右答案即为线性。
细节有点多,而且我还没有完全理解。
qoj1286 Ternary String Counting - Problem
会 \(n^3\) dp先别急着扔掉做法啊。(
dp 为:\(dp_{i,j,k}\rightarrow dp_{i+1,j,k},dp_{i+1,j,i},dp_{i+1,k,i}\)。当然要处理出 \(L2_i,R2_i,L3_i,R3_i\) 表示后两维的范围。
发现每次就是保留之前的矩阵,或许向某个元素加某一个列或者某一行。维护列、行的和,每次要添加数或者删除数,但是注意到添加的数都是 \(dp_{?,i}\),所以每一个数只会被添加一次,暴力删即可。
\(L2,R2,L3,R3\) 就修改 \(r\) 处的值就好了,后面的或者前面的其实都被制约到了。
只要注意到 \(a_i\) 越大值就一定越大就好了。线段树先跑右子树再跑左子树即可。
sol1:
or 的经典性质是变化 \(\log\) 次,但是可以从 \(n\) 个点出发啊?
发现很像分治能解决的问题。所以直接线段树维护。那么维护前缀 or,后缀 or 变化时候的值和下标,中间暴力 log^2 合并。
那么每次要修改 log^3 个信息,我们把这些放进长度为下标的线段树,然后每个位置用懒惰删除的堆维护即可。
时间复杂度 \(O(n\log^4 n)\)。
sol2:
我看不懂题解,咕咕咕。
犯唐了。
把加入所有出边改为加入第一个儿子或者下一个兄弟。问题转化为快速找到三条链的 \(k\) 大值。
可以建主席树,但是会被卡空间。
考虑树剖,这样可以 log 查询任意一条链的最大值,所以每次断链即可。
CF1943D2 Counting Is Fun (Hard Version)
犯唐了。
考虑容斥,容斥一些钦定不合法的,那么设 \(dp_{i,j}\) 为第 \(i\) 个选 \(j\)。
若 \(i+1\) 钦定合法,那么 \(dp_{i+1,u}\leftarrow dp_{i,j}\)。否则,\(dp_{i+2,u}\leftarrow -dp_{i,j}\times \max(0,k-(u+j))\)。记两个数组前缀和 dp 即可。
CF1943E1 MEX Game 2 (Easy Version)
首先考虑二分。
Alice 的策略肯定选当前个数最少的,如果当前 Bob 操作时出现一个及以上 \(a_i<k\) 的,那么 Bob 就赢了。
这个相对顺序感觉起来肯定是不会变的,也就是说,Bob 会优先在后缀上删数,使得删完他们的相对顺序也不会变。
考虑枚举哪个数在 Bob 操作时 \(<k\)。每次 Alice 操作后,从后往前枚举,二分,看当前数能否到这个值即可。
时间复杂度 \(O(n^4\log^2 n)\)。比其他 easyver. 的做法多了个 nlog。
CF1943E2 MEX Game 2 (Hard Version)
如何把 \(O(n^4\log^2 n)\) 的算法优化到 \(2\times 10^5\) 能过?
现在 Alice 的策略很明晰了,考虑把 Bob 的策略简洁地表示出来。
发现就是每次选最大的减 \(1\)!那么维护相同即可。
好像可以做到 \(O(n^3\log_2 n)\) 了。
我看不懂题解,咕了。
可以翻译成一个点要么是倍数,要么是因数。
那么拆点变成 \((x,0)\) 和 \((x,1)\) 表示倍数和因数,若 \(x|y\),\((x,0)-(y,0)\),\((x,1)-(y,1)\),\((x,0)-(y,1)\),\((x,0)-(x,1)\) 表示不能同时出现。转化成一般图最大独立集。
发现这个东西有传递性。那么独立集就是反链了,所以转化成最小链覆盖,再拆点跑最大匹配即可。
[AGC029F] Construction of a tree
考虑 \(1\) 固定,\(2\sim n\) 和这 \(n-1\) 个集合求一个匹配,若没有完美匹配则一定无解。
否则,从 \(1\) 扩展,能连就连。
考虑一下正确性:若当前还有点但是连不了,说明剩下集合中并没有前面出现的所有数,这个时候怎么调整匹配都是不行的,所以无解了。否则就一定有解。
考虑最小割二选一模型。分讨一下 \(P_i\) 和 \(Q_i\) 的情况即可。注意不要拆点。
感觉这个题很玄学。
[ARC175F] Append Same Characters
考虑答案为添加的字符串 \(|X|\) 加上逆序对个数。
分析一下性质,注意到只会改变一个串是另一个串子串的情况。设多出来的部分为 \(Y\),那么就是 \(YX<X\)。
引理:\(YX<X\Leftrightarrow Y^{+\infin}<X\),这启示我们按照 \(Y^{+\infin}\) 从大到小排序。
引理:\(X^{\infin}<Y^{\infin}\Leftrightarrow XY<YX\)。
注意 \(Y\) 只会是某个串的后缀,只会有 \(O(n)\) 个,全部拿出来排序即可。
那么只需要 \(Y_i^{\infin}>X\geqslant Y_{i+1}^{\infin}\),\(\min(len_X)=lcp(Y_i^{\infin},Y_{i+1}^\infin)+1=lcp(Y_iY_{i+1},Y_{i+1}Y_i)+1\)。(不能为前缀关系)
把所有串拼在一起即可使用 SAM/SA 维护,时间复杂度 \(O(n\log_2 n)\)。
存在一种最优解使得所有 \(A_i\neq 0\)。
将一个点拆成 \([x\leqslant a_i]\),那么每个点贡献 \(2x-1\),并且每个这样的点对贡献 \(1\)。
可以建成权闭合子图。那么 \(A_i=0\) 就是 \(a_{i,1}\) 必须选,\(A_i=k\) 就是 \(a_{i,k}\) 必须选,\(a_{i,k+1}\) 不能选。必须选用 \(-\inf\) 指向它,不能选用它指向 \(+\inf\) 即可。
那么就做完了。
[ARC161F] Everywhere is Sparser than Whole (Judge)
需要对最小割的深刻理解。
首先密度子图有权闭合子图做法,就和上个题一样。所以现在瓶颈在于判断是否存在子图密度 \(=D\)。
考虑钦定 \(S\rightarrow a_1\) 不割,设为 \(\inf\),那么就是必选。此时跑最小割,注意到最小割的所有方案都在满流边中,所以只需要存在一个边(\(a_2\sim a_{n*n}\))使得 \(S\) 通过残余网络不能到它。
考虑钦定不选。此时跑最小割只需要不全割左边。那么一样的,存在右边一个点 \(T\) 不能到达。
发现密度 \(>D\) 的子图也不用先判一遍,直接跑这个算法,也是对的。
CF1450H1 Multithreading (Easy Version)
考虑给定一组序列如何计算最小值。
首先不难发现最优策略是每次删去两个相同的,最后剩下 BWBWBWBW...,然后答案即为 \(cnt/4\)。
如何快速找出删去后还剩多少个字符?发现匹配的两个同色点一奇一偶,并且最后匹配结束全为奇或者全为偶。那么答案啊就是 \(|(cnt_e-cnt_o)|/2\)。
答案就是 \(\sum_{i=0}^{k_1}\sum_{j=0}^{k_2}|\frac {d-i+j} {2}|\binom {k_1} {i}\binom {k_2} {j}\)。
可以直接 FFT。
但是这肯定将问题一般化了,原题是组合数,考察 \(i-j\) 项的系数,发现这就是范德蒙德卷积啊!所以 \(O(n)\) 就可以了。
抄了一篇题解,多项式怎么练啊?
考虑 [AGC034F] RNG and XOR 的思想,将其表示为集合幂级数。
\(F(x)=F(x)G(x)+I-2^{n}\),即 \(F(x)(1-G(x))=\sum_T x^T-2^n\)。
直接除过去跑复杂度不能接受,考虑在此处 FWT。即 \([x^U]\widetilde F(x)(1-\widetilde G(x))=[x^U]\sum_T (-1)^{U\& T} -2^n\)。
当 \(U=\empty\),原式成立,事实上那个 \(2^n\) 就是这么推出来的。
否则 \([x^U]\widetilde G(x)<1\),除过去变成 \([x^U]\widetilde F(x)=[x^U]\frac{\sum_T (-1)^{U\& T} -2^n}{(1-\widetilde G(x))}\)。发现 \(\sum_T(-1)^{U\&T}=0\)。所以 \([x^U]\widetilde F(x)=[x^U]\frac{-2^n}{(1-\widetilde G(x))}\)。
形式够简洁了,我们代回去。 \(f(T)=2^{-n}\times\sum_U(-1)^{T\& U}[x^U]\widetilde F(x)=\sum_{U\neq \empty} (-1)^{T\& U}[x^U]\frac{-1}{(1-\widetilde G(x))}+[x^{\empty}]\widetilde F(x)\times 2^{-n}\)。
其实 \(\widetilde G(x)\) 的某一项是非常好算的,\((-1)^{T\& U}\) 和 \([x^\empty]\widetilde F(x)\times2^{-n}\) 比较难处理。
考虑我们并没有用到 \(f(\empty)=0\) 的条件。将其代入,那么 \(\sum_{U\neq \empty}[x^U]\frac{1}{(1-\widetilde G(x))}=[x^{\empty}]\widetilde F(x)\times 2^{-n}\)。
所以 \(f(T)=2\sum_{U\neq \empty} [2\nmid|T\& U|][x^U]\frac{1}{(1-\widetilde G(x))}=\sum_{U\neq \empty} [2\nmid|T\& U|][x^U]\frac{1}{\sum p_i}\)。
即选奇数个为 \(1\) 的数。直接背包即可。
其实多猜几次就可以猜到这个转移了。(
CF1450H2 Multithreading (Hard Version)
考虑 easy version 的式子 \(\sum_{i=0}^{k_1+k_2}|\frac {t-k_2+i} {2}|\times\binom {k_1+k_2} {i}\times [2|t-k_2+i]\)。
令 \(k=t-k_2,cnt=k_1+k_2\),把除以 \(2\) 放在全局,即求 \(\sum_{i=0}^{cnt}[2|k+i]\times |k+i|\times \binom {cnt} i\)。
分讨拆绝对值,\(ans=\sum_{i=0}^{-k}(-2k-2i)\binom {cnt} {i}+\sum_{i=0}^{cnt} (k+i)\binom {cnt} {i}(2|k+i)\)。
\(\Rightarrow ans=-2k\times \sum_{i=0}^{-k} \binom {cnt}{i}-2cnt\sum_{i=0}^{k-1}\binom {cnt-1} {i}+k\sum_{i=0}^{cnt}\binom {cnt} {i}+cnt\sum_{i=0}^{cnt-1}\binom {cnt-1}{i}(2|k+i)\)。
后面两项的维护是简易的,前面两项,注意 \(\sum_{i=0}^k\binom {cnt}{i}\times [2|k+i]=\sum_{i=0}^k \binom {cnt-1} {i}\),所以也可以直接类似莫队的样子维护。所以就做完了。
你可能想到要维护时间大于等于某个值的历史最大值。原因是这是个 4-side 问题。
那么直接分治即可。就做完了。
CF1805F1 Survival of the Weakest(easy version)
数据范围可以暴力 \(O(n^2\log_2 n)\) 做,但是数太大了可能会爆掉。
注意到每次操作后极差不升:一次操作后 \(a'_1=a_1+a_2\),\(a'_{n-1}\leqslant a_1+a_n\),极差 \(\leqslant a_n-a_2\leqslant a_n-a_1\)。
所以每次将 \(a_{2\sim n}\) 都减去 \(a_1\) 即可。
CF1805F2 Survival of the Weakest
建出操作树,考虑撤销并查集。
发现 polylog 不能很好适配,结合 \(kth\),直接值域分块。
维护第 \(i\) 个块数的个数,散块暴力查,时空复杂度都是 \(O(n\sqrt {n\log_2 n})\)。
套路地一个块一个块跑,空间就降到了线性。
然后散块的操作可以在合并分裂的时候平衡复杂度,维护一个链表,然后查询时 nth-element 即可消去 log。
空间线性被卡。
首先,形如某个数加 \(x\) 可以拆点,连 \(((i,x),(i,x-1),\inf)\),\(((i,x),T,1)\),然后跑最小割。
原图是一般图的形式不太好处理,让我们进行一步转化:若 \(a_x<\min(b_x,b_y)\),就 \(a_x\leftarrow \min(b_x,b_y)\),\(a_y\) 同理。
转化后,设 \(b_x<b_y\),不合法的情况为 \(b_x\leqslant a_x,a_y<b_y\)。
发现此时为二分图!所以对于 \(a_x\leqslant b_x\) 的情况,连 \((S,x,b_x-a_x)\),否则左边是有选择的,就按照第一句话的方式建边。然后连 \((x,(y,b_y-a_x),\inf)\)。跑最小割即可。
连成基环森林。
发现由于一定是偶环,环一定长度为 \(2\) 最优。
考虑若这个数周围有小于它的数,那么可以直接指向它。否则必须找周围一个相等的数匹配。
发现就是上下界二分图匹配,跑上下界网络流即可。
[AGC031E] Snuke the Phantom Thief
枚举总数,转化成横纵坐标前缀珠宝的范围。
试图转化成对每个元素的限制,发现可以找到每个珠宝横纵坐标的范围。
然后随便连边跑费用流即可。
P6967 [NEERC2016] Delight for a Cat
考虑这样一个模型:有 \(n\) 个区间,每个有费用和个数限制,每个被覆盖的元素有上下界的覆盖限制。
考虑 \(l\rightarrow r +1\),\(i\rightarrow i+1\) 跑最大流。\(l\rightarrow r+1\) 就表示 \([l,r]\) 要选。
这个题限制在区间上,考虑区间和点的含义交换,就做完了。由于下界相同跑最大费用最大流即可。
简单题。但好像稍微打复杂了?
由于所有颜色紧贴很容易切断另外一条颜色的出路。想到构造类似阶梯状的图使得列与列中间有空列。
那么就好做了,一层解决一个颜色即可。
具体可见洛谷第一篇题解。
CF1909I Short Permutation Problem
考虑固定 \(m\),考虑 \(k=n-1\) 的情况。
将原数列按照 \(\min(i,m-i)\) 排序,两个数合法当且仅当前面一个数 \(>\frac {m} {2}\)。
考虑按照 \(\min(i,m-i)\) 的顺序对序列插入元素。那么当前一个数相邻两个位置一定 \(>\frac m 2\)。
也就是说,初始 \(t=1\),若插入 \(>\frac m 2\) 的数 \(t\leftarrow t+1\),否则 \(t\leftarrow t-1\),方案数即为 \(\prod t\)。
可以预处理阶乘 \(O(1)\) 解决。
考虑一般的 \(k\),钦定 \(i\) 对位置满足题意。最后二项式反演即可。那么剩下 \(n-1-i\) 对相当于将序列分成 \(n-i\) 段。让初始值 \(t=n-i\) 即可。
但是这样可能有某些段为空,所以再容斥一下就好了。
所以对于每个 \(m\) 跑两遍 NTT,时间复杂度 \(O(n^2\log_2 n)\)。
2022-2023 集训队互测 Range Minimum Element
考虑判断一组 \(\{b\}\) 是否合法。
那么 \([l,r]\) 中的元素都要 \(\geqslant b_i\),考虑 \(a_i=\max_{l\leqslant i\leqslant r}b_i\),发现增大 \(a\) 中元素毫无意义。但是 \(\{a\}\) 正向操作要能变成 \(\{b\}\),所以现在要计数这样能生成的 \(\{a\}\) 的数量。
考虑从大到小填数,那么现在应该有若干连续段,考虑使用区间 dp 计数。
令 \(dp_{l,r,w}\) 为 \([l,r]\) 填 \(\geqslant w\) 的方案数。令 \(F(l,r)\) 为 \([l,r]\) 被某些区间恰好覆盖的。这个可以预处理。
每次可以找到区间内第一个 \(=w\) 的数 \(u\),此时需满足 \(F(l,u-1)=1\)。右边的可以继续 dp。所以 \(dp_{l,r,w}\leftarrow dp_{l,u-1,w+1}\times dp_{u+1,r,w}\)。还有全不选 \(w\),那么 \(dp_{l,r,w}\leftarrow dp_{l,r,w+1}[F(l,r)=1]\)。
边界是 \(dp_{l,r,w}=1\),还有 \(dp_{i,i,w}=1+F(i,i)*dp_{i,i,w+1}\)。
你可以理解为前面已经判断了类似 \(F(l,r)=1\) 的东西,所以后面把随便某个数看成 \(w\) 是合法的。
此时复杂度 \(O(n^3c)\)。注意到 \(dp_{l,r}\) 是关于 \(w\) 的 \(len\) 次多项式,所以可以插值。时间复杂度 \(O(n^4)\)。
把两个符号看反了,有点搞笑。
考虑链怎么做,结合异或的性质,设 \(f(x,i)\) 为 \([x,x+2^i)\) 中 \(v_j \oplus dis\) 的总和。那么 \(f(x,i)=f(x,i-1)+f(x+2^{i-1},i-1)+w(x+2^{i-1},w+2^i-1,i-1)\)。其中 \(w(l,r,k)\) 表示 \([l,r]\) 第 \(k\) 位是否存在提供的贡献(\(2^k/-2^k\))。原因是后面一半只会在第 \(i-1\) 有偏差。
查询发现也这样做即可,单 log。
考虑树,解法是前缀和,先咕了。
P8923 『MdOI R5』Many Minimizations
考虑原问题的 slope trick 做法:每次加入两个 \(a_i\),删去最大值,答案即为 \(\sum mx_i-a_i\)。
发现答案只和剩下数的和有关,这就比较优美了。
考虑将 \(x\) 改为 \(\sum[i\leqslant x]\)。若枚举 \(i\),可以将问题转成 \(01\) 序列。
那现在只和 \(0\) 和 \(1\) 的个数有关了,考虑转成格路计数:从 \((0,0)\) 开始,每次可以向 \((1,1)\) 或者 \((1,-1)\) 方向走一步,方案数分别为 \(m-i+1\) 和 \(i\)。若 \(<0\) 就变成 \(0\)。求 \(\sum f_ii\),其中 \(f_i\) 为到 \((n,i)\) 的方案数。
非常人类智慧地,若当前 \(<0\),那么将这段前缀加 \(1\),发现新路线与当前路线构成了双射,且终点没变!
那么转化为不能超过 \(y=0\) 的方案数。那就是经典做法了。但是已经要经过一次 \(y=0\),所以减去 \(y=1\) 的方案数。
推推式子是 \(\sum_j (\sum_x x^j \times (m-x)^{n-j})\times (\sum_{i+2j\geqslant n}(\binom {n} {i+j}-\binom {n}{i+j+1})\times (2j+i-n))\)。
前面那个可以插值,可以做到 \(O(n^2)\)。
稍微有些卡常,使用常见卡常方法即可通过。
其实这题我做过,但是今天看到了另解。
回顾一下原做法:首先转成钦定 \(i\) 条重复,若已知重复边集,那么方案数为 \(n^{k-2}\times \prod siz\)。那这相当于每个连通块选一个点提供 \(n\) 的贡献,树上背包即可。\(O(n^2)\)。
考虑把原来的边看成 \(x\),新边看成 \(1\),求生成树数量会怎样?那么 \(ans_i\) 就是第 \(i\) 项的系数。
想到插值,代入 \(n\) 个点值跑矩阵树定理,时间复杂度 \(O(n^4)\)。
恰好包含比较难绷,咕咕咕。
抵消的问题可以想到矩阵与矩阵的逆。
那这个题直接奇数换成 \(A\),偶数换成 \(A^{-1}\),最后看是不是 \(I\) 即可。矩阵可以随机。
两个性质:第二个点一定与其相连,最后一个点一定是叶子。
考虑从点 \(1\) 的 dfn 倒着还原,形如儿子向父亲合并的操作。
那么对于这个点,第一个没出现的点就是它的父亲。那么就做完了。
qoj6508 This is not an Abnormal Team!
有点像匹配。
如果出现了长度为 \(4\) 的链,那么可以拆成两对。
也就是说,每个点有两个匹配位置。那么让单点最少就是让没匹配的点最少。把第一条边的花费设为 \(-\inf\) 跑费用流即可。那么第三条边最少就是把第二条边设为 \(-1\)。
直接跑是 \(O(nmf)\) 的。但是注意只可能有两种流量,可以先跑第一种,跑完后加入第二种边,跑最大流即可。时间复杂度 \(O(m\sqrt n)\)。
不知道能不能不用动态加边而是控制最短路的方式,反正我现在觉得不是很好做。
等价于给 \(2n-2\) 个点找父亲。\(2n-2\) 条边可以分给两个点之一。
那么如果是基环树森林就有解并且是 \(2^{cnt}\) 次方,否则无解。
写在这里提醒自己不要忘了矩乘。

浙公网安备 33010602011771号