do_while_true

一言(ヒトコト)

杭电多校 2026

第一场

1001

答案一定出现在 \(x+a_i\) 最小最大,以及 \(y+b_i\) 的最小最大,的乘积之中。为了照顾不选的情况,再将 \(a\)\(b\) 中塞入两个 \(0\) 即可。

1004

菊花的情况是 exchange argument,经过推导得到 \(\frac{b}{a}\) 更小的排在前面,根据 01 on Tree 那个题的结论,每次将 \(\frac{\sum b}{\sum a}\) 最小的连通块,与其根的父亲所在连通块,合并即可。用一个 set / 可删堆维护所有连通块的 \(\frac{\sum b}{\sum a}\)

1005

std 的做法是将 \(a^xb^y\) 拼出所有数。队友的做法是每拼一段 baaaaaa 就是 \(+1+2+3+4+5+6+7\),贪心选取就可以做到 \(\mathcal{O}(\sqrt k)\) 的长度。总之思路就是写个暴力,然后试一些特殊的构造,把目标拼出来。

1006

点亮 \(a_i\)\(1\) 时,\(c=\)\(i\) 之前的 \(10\) 个数》+《\(i\) 之后的 \(01\) 个数》\(+1\)(即 \(i\) 本身的连续段)。

用期望的线性性拆出来,也就是对于每个位置 \(p<i\)\(P(w_p=1,w_{p+1}=1)\cdot a_i\),发现相当于点亮时间 \(t_p<t_i<t_{p+1}\),所以概率是 \(\frac{1}{6}\),算上后半段,一共有 \(\max(0,i-2)+\max(0,n-i-1)\)\(p\),所以答案是 \(\sum\limits_{i=1}^n \frac{1}{6}(\max(0,i-2)+\max(0,n-i-1))a_i\)

1008

观察到最劣情况下,分出的段长为 1+2+3+...,所以最长的一段不超过 450,那么可以设 \(f_{i,j}\) 表示从 \(i\) 开始长度为 \(j\) 的这一段,往后接最长能接多少个。如果从 \(f_{p,k}\) 转移而来,如果 \(k>j\) 那么可以直接后缀和优化掉,如果 \(k=j\),还需要保证 \(p\) 开头的长度为 \(j\) 的串,字典序比 \(i\) 开头的长度为 \(j\) 的串更大,那么这部分可以利用后缀数组的 height,处理出所有后缀长为 \(j\) 的前缀的排名,那么转移就变成二维偏序了。

时间复杂度 \(\mathcal{O}(n\sqrt n\log n)\),由于是树状数组的 \(\log n\) 常数较小可以通过。

1010

最逆天之题,根本不会做博弈论,我只能投降。

首先 \(n=1\) Bob 必胜,\(n=2\) Alice 必胜。\(n=3\)\(x_1>x_3\) Alice 必胜,\(x_1\leq x_3\) Bob 必胜。

此时观察 \(n\geq 3\) 时相当于军备竞赛,两个人都同时往中间尽可能地移动,令 \(s_a\) 为前半部分 Alice 的总和,\(s_b\) 为后半部分 Bob 的总和,如果谁的严格大谁就赢了。这个证明是比较容易的,如果一方严格大,它一定能取完就取完,那么对方无论怎么操作,最终缩减到 \(n=3\) 的时候还是严格大的那个赢(无论它变成先手还是后手)。

但是在 \(s_a=s_b\) 时,他们要争抢成为 \(n=3\) 时的后手,还要保证不能被对方多取额外一堆(导致变成对方严格大)。考虑 \(n=1\) 的时候后手必胜,我们相当于抢 \(n=1\) 的后手,那么此时就可以类比,将中间三堆视作同一堆,去争抢成为最后 \(n=3\) 的后手。所以相当于 \(s_a\) 删掉最右边的一个,\(s_b\) 删掉最左边的一个,再进行比较 ...... 依次类推,相当于前缀和与后缀和,比较一下字典序谁严格大。

这个地方正着思考了很久,总是得出不完备的结论,后来刷新脑内缓存,利用类比思考出来了正确的做法。

对于奇数的情况是这样做,字典序相同判 Bob 赢。对于偶数的情况类比应该大致是相同的,只不过字典序相同判 Alice 赢,这里没有细推,对拍过了那就是对的。

1012

先视作 \(x_i,y_i\) 表示为 \(v_y\) 会给 \(u_x\) 贡献 \(k\) 倍,建图让 \(y\) 连向 \(x\),每个 \(v_i\) 会给自己的 \(u_i\) 贡献一倍。先构造得松一些,分析余数,能不能让 \(\bmod k\) 是满足的,发现 \(u_i\equiv v_i\pmod k\),那么先令 \(v_i \gets u_i \bmod k\),再从此基础上进行调整。

此时再调整只能让 \(v_i+k\),那么就会使得 \(u_i+k\),并且 \(i\) 的出点 \(j\) 都会 \(u_j+k^2\),此时将所有数都对 \(k\) 整除,问题的规模除以了一个 \(k\),那么预估 \(\mathcal{O}(\log u)\) 轮就能归约到一个边界情况。

这里出现了问题,因为有负数的存在,模出来定哪个数,向 0 取整还是向下取整,\(u\) 的值还在一个负数上循环,出现一些边界问题,在这里卡住了。事实上,最开始就是在模空间下分析的,后面逐层迭代也应该去想在模意义下是在做什么。

事实上,如果每次都让 \(v_i\) 变为 \([0,k-1]\) 中的数,相当于确定好了原问题的 \(v_i\bmod k^t\) 的值,其中 \(t\) 是迭代的轮数。那么迭代到 \(k^t>2\cdot 10^9\),由于要求 \(v\in [-10^9,10^9]\),就能区分出真正的 \(v\) 是正数 \(\leq 10^9\) 还是负数,取模之后变成 \(>10^9\) 的了。由于真正的 \(v\) 可能超级大,不在 \([-10^9,10^9]\) 之中,所以还要最后 check 一下对不对。

1002 (补)

复制一下题解:

找到一组链剖分,把链垂直摆放,链上的左子树放在左边,右子树放在右边,子树递归下去画。

\(y_{fa_i} < y_i\) 这条限制使得高度至少得是 \(\Omega(n)\),因此需要分析画面的宽度。记链上最大的左子树大小为 \(\alpha\),最大的右子树大小为 \(\beta\)

如果使用重链剖分,不失一般性令 \(\beta\) 对应子树的深度比 \(\alpha\) 大,可以得到宽度的递推式:

\[\begin{aligned} W(n) &= \max_{\alpha \le n/2, \beta \le (n-\alpha)/2} (W(\alpha) + W(\beta)) + 1 \\ &= W(n/2) + W(n/4) + 1 \\ &= \mathcal{O}(n^{\log_2 \phi}) = \mathcal{O}(n^{0.695}) \end{aligned} \]

无法通过,需要优化。

不妨稍稍修改一下重链剖分:找到一条链使得 \(\alpha + \beta \le n/2\)。这条链一定是存在的,可以归纳证明:从根向下走到某节点,根到该节点的链满足 \(\alpha + \beta \le n/2\) 的条件,当前左右儿子的大小分别是 \(L\)\(R\)

  • \(\alpha + R \le n/2\),走左儿子;
  • \(\beta + L \le n/2\),走右儿子;

上面的两个条件无法同时不成立,因此链存在,故而可以进行链剖分。这样链剖分的宽度变为:

\[\begin{aligned} W(n) &= \max_{\alpha + \beta \le n/2} (W(\alpha) + W(\beta)) + 1 \\ &\le 2W(n/4) + 1 \\ &\le 2\sqrt{n} \end{aligned} \]

可以通过。

这样子改重链剖分的契机是什么?

宽度为 \(W(n) = \max\limits_{\alpha,\beta} (W(\alpha) + W(\beta)) + 1\) 的这个构造摆在这里,而直接重链剖分的递推式中 \(\alpha\)\(\beta\) 不平衡,尝试将它平衡到一个比较优的地方,就让它们同时小一点。

那么可能存在一个 bound,使得每次往下走的时候能控制 \(\alpha\)\(\beta\) 比较小。同时 \(\leq n/2\) 有点太弱了,因为每次往下走时 \(L,R\)\(\alpha\)\(\beta\) 是一个 chkmax,所以应该像一个 \(\sum \leq n/2\) 的 bound。

1013 (补)

这个题的思路与 Tutte 矩阵求解一般图最大匹配有异曲同工之处,少了容斥,多了个变元去描述红边个数。

考虑令 \(A_{i,\pi_i}\) 为二部图 \(i\to \pi_i\) 这条边的边权,不存在则为 0。则积和式 \(\text{perm}A=\sum\limits_{\pi}\prod\limits_{i=1}^nA_{i,\pi_i}\) 可以描述所有完美匹配。

此前遇到的题,例如某次省队集训题,均是用行列式去描述,这里有另外的思路是积和式去描述。

那么令 \(x_{i,j}\) 为两两不同的变元,\(z\) 为描述红边的变元,那么令 \(A_{i,j} = \begin{cases} x_{i,j}, & c(i,j) = 0, \\ x_{i,j}z, & c(i,j) = 1. \end{cases}\),则求其积和式,提取 \([z^k]\) 即为所有 \(k\) 条红边的完美匹配,那么存在完美匹配当且仅当 \([z^k]\text{perm}A\) 是非零多项式。

由于变元之间线性无关,所以正负不影响,故可以将积和式视作行列式,那么利用 Schwartz-Zippel 在 \(\mathbb{F}_p\) 下给每个变元随机权值,作行列式,再对 \(z\) 进行拉格朗日插值即可求出对应系数。这里朴素实现时间复杂度 \(\mathcal{O}(n^4)\)

还要考虑怎么优化到 \(\mathcal{O}(n^3)\),以及构造方案,但我已经困了。

posted @ 2026-07-22 01:52  do_while_true  阅读(125)  评论(2)    收藏  举报