杂题选做(3)

ARC068F

额首先第一阶段,进入这个 deque 的时候,一定是一个单谷的状态。且 \(1\) 为最小值。

然后考虑后面我出队的时候,出到 \(1\) 的时候,剩下来 deque 里面一定是一段单调的序列
也就是说,假如我钦定出队按元素大小,从大到小出,那么算出来的方案,在最后要乘上 \(2^{\max(0, n-k-1)}\)。不难发现目前这部分不会算重,也不会算漏。

这么钦定有什么好处呢?
这样一个结果序列合法,当且仅当她可以被分成两个单调递减的子序列。
然后由 Dilworth,等价于不存在一个长度为 \(3\) 的递增子序列。
这是第一个难点。

第二个难点是,我怎么设计状态,对 \(p_k=1\) 计数。
考虑逆排列 \(q\)。发现原排列的合法性和逆排列的合法性是等价的!
这样就要求 \(q_1=k\)
\(f_{i,j}\) 表示,\(\{1,2,\dots, i\}\) 构成的排列中,\(q_1=j\) 的。
转移的话,考虑 \(q_2\) 的大小,分成 \(<j,=i-1,\text{otherwise}\) 三类。
不难稍微前缀和一下做到 \(O(n^2)\)

更进一步地,可以把状态转移直接写成格路计数的形式。(归纳证明)
然后反射容斥做到线性。

AGC013D

哎首先我们可以刻画这个合法的条件对吧。那我们可以把问题转化为,在一个
5e3f4aeab3df93e415ea70d40185a751
这样的网格中,每个格子里有一个区间 \([l, r]\),从 \((1, 1)\) 开始走,只能向下一步或向右下一步,走到 \((2m, *)\),求路径上区间交非空的方案数。
那好像这个东西只能枚举最终的区间右端点,简单差分一下去重,做到三次方。寄。


学习题解做法。注意到我们可以直接 DP,记录 \(f_{i,j}\) 表示我操作了前 \(2i\) 个,现在有 \(j\) 个红砖,\(n-j\) 个蓝砖。转移讨论一下 RB 就行。

但是这样 DP 出来显然和结果序列不是一一对应。因为我多个初始状态(初始 \(j_0\) 个红砖,\(n-j_0\) 个蓝砖)可能对应同一个合法的结果序列。
哦。那你考虑我 \(n\) 的时候 DP 一下,求出来个答案;我 \(n'=n-1\) 的时候求出来个答案。两个一减就是最终答案。

为啥是对的?
\(n'=n-1\) 的时候,相当于钦定了我始终有一个红砖放在箱子里。那我可以理解为,我钦定了某一次红砖恰用完。容易发现(你也是注意力惊人???),我这样钦定之后,就和结果序列构成双射了。
复杂度 \(O(nm)\)

AGC040F

大大大神秘题。
那么首先这个操作 2 很搞事情啊。我们如果只考虑操作 1 呢?
有一些基本的钦定是,设棋子 1 永远在棋子 2 的前面。然后这里如果我只考虑操作 1 的话,我先让棋子 2 往前走一步,然后钦定 1 和 2 的距离 \(d\) 永远大于等于 \(1\)
用一个二元组 \((b,d)\) 来表示棋子的状态:棋子 1 的坐标为 \(b-d\),棋子 2 的坐标为 \(b\)

那操作无非三种:

  • 操作 1:
    • \(b\) 加一,\(d\) 加一;
    • \(d\) 减一;
  • 操作 2:\(d\) 清零。

那么考虑我进行了操作 \(1\) 若干次,我枚举末态\(d\),要求 \(d\ge B-A\)

然后把清零操作插入进去,使得我降低末态的 \(d\),直到等于 \(B-A\)
关键的观察是,我能把清零操作插入到某个位置后面,当且仅当她是严格后缀最小值
证明的话,因为清零相当于后缀整体下降一些高度,然后我要求后面的下降了之后还要 \(\ge 1\),所以是严格最小值。然后后面即使有过一些清零操作,也救不了,因为 \(d\) 只会 \(\pm 1\) 地变化。

进一步地,我只有最后一次清零才会对末态产生影响!所以我最后一次清零的位置是固定的!
然后我插入位置的个数也是固定的(\(d-B+A+1\))!不随我只考虑操作 1 的序列的形态而变化!!!!这就是妙的地方啊。所以插入的系数就是一个隔板法。(\(d=B-A\) 的时候要特判一下)

所以最终的答案就是一个格路计数(反射容斥)乘上隔板法,求和。复杂度线性。可能需要特判 \(A=0,B=0\)

CF1770F

世纪名题。
额首先 \(n\) 为偶数答案肯定是 \(0\)\(n\) 为奇数时,由一些配对手法,只需要管 \(a_1\)
那么直接写式子了啊。枚举 \(a_1\),算方案数的奇偶。

\[\begin{aligned} \bigoplus_{a_1\subseteq y}a_1\left[\left(\sum_{\sum_{i=2}^n a_i = x - a_1}\left [\operatorname {OR}_{i=1}^n a_i = y\right]\right) \bmod 2\right]&=\bigoplus_{a_1\subseteq y}a_1\left[\left(\sum_{\sum_{i=2}^n a_i = x - a_1}\sum_{a_1\subseteq y'\subseteq y}\prod_{i=2}^n[a_i \subseteq y'] \right) \bmod 2\right]\\ &= \bigoplus_{a_1\subseteq y}a_1\left[\left(\sum_{\sum_{i=2}^n a_i = x - a_1}\sum_{a_1\subseteq y'\subseteq y}\prod_{i=2}^n\binom{y'}{a_i} \right) \bmod 2\right] \end{aligned} \]

这一步逆用 Lucas 无敌了。
接下来就是

\[\begin{aligned}&= \bigoplus_{a_1\subseteq y}a_1\left(\sum_{a_1 \subseteq y' \subseteq y} [x-a_1 \subseteq (n-1)y']\right) \\ &= \bigoplus_{2^i \subseteq y}2^i\sum_{2^i\subseteq a_1}\left(\sum_{a_1 \subseteq y' \subseteq y} [x-a_1 \subseteq (n-1)y']\right) \\ &= \bigoplus_{2^i \subseteq y}2^i\sum_{a_1}\sum_{y' \subseteq y} [a_1 \subseteq y' - 2^i]\binom{(n-1)y'}{x-(a_1+2^i)} \\ &= \bigoplus_{2^i \subseteq y}2^i\sum_{y' \subseteq y} \binom{ny'-2^i}{x-2^i} \end{aligned} \]

复杂度 \(O(y\log y)\)

P12251

很牛,但也很 tricky 的题目。一年之前场上只会暴力,并且 DFS 内部写的还是 \(O(n^2)\) DP。现在来补一下吧。
哦然后现在知道了原来波特就是 bot 的意思。

首先你对于一个确定的卡片序列,我怎么计算答案?
\(O(n^2)\) DP 还是太唐了,并且也没法在外层 DP 中刻画。
那么这是一个很典的模型啊,考虑倒着取,每到一个就往堆里塞,隔一个取一个堆顶。

现在考虑怎么算期望。然后又是做烂的拆期望。因为这个堆的结构太难刻画了,考虑枚举一个 \(t\ge 1\),转成计算我期望能取到多少个 \(\ge t\) 的牌,最后加起来。

DP 是平凡的:设 \(f_{i,j}\) 表示考虑后 \(2(n-i+1)\) 个牌,目前还有 \(j\) 个大于等于 \(t\) 的牌备用,期望能取出多少个。转移的话,稍微讨论一下这两张是大于等于还是小于 \(t\) 的,小于 \(t\) 的话讨论一下 \(j\) 是不是为 \(0\)
我的写法比较糖啊,还需要维护一个 \(g\) 表示概率。但把转移边画出来,看成路径权值和,好像直观一点。

进一步地,考虑优化这个 \(O(n^2m)\) 的东西。
发现每一步的概率形如 \(k_i\times \max(s_i-t, 0)\),其中 \(k_i,s_i\) 都是和 \(i\) 有关的常数。
那么是一个关于 \(t\) 的一次或常函数。
算出来的概率,也是一个关于 \(t\) 的函数。经典地,使用插值技巧优化。

但是这里有个小问题:\(t\) 在不同的范围内是分段的,那也就是说我们需要在 \(O(n)\) 段中,每段都取 \(O(n)\) 个点值,每个点值再 \(O(n^2)\) DP 一下。爆掉了。

马队:DP 值可以重复利用。
因为 \(t\) 分段,即在一个前缀中那个概率,总是只能取到 \(0\)。那恰好可以利用之前的 DP 值。
那么现在可以 \(O(n^3)\) 把每一段的多项式算出来了。

最后我们要计算一个形如 \(\sum_{x=l}^r f(x)\) 的东西,这个是 CF622F。不过这里没必要线性插值就是了。

额那我们现在可以写出一个常数巨大的代码。
很唐啊,插值来插值去的。

你动点脑子,算 \(A\) 的前缀和的时候,多插两遍干什么。
首先,算 \(A\) 的系数的时候,用到的点值恰好为 \(1\sim n+1\)。额不仅 \(\sum x^k\) 关于 \(n\) 是 det 为 \(k+1\) 的多项式,\(\sum_{x}A(x)\) 关于 \(n\) 也是次数 $ \le \det(A)$ 的多项式 \(B\)
那我直接把这些点值求一个前缀和,再插值一下,不就把 \(B\) 弄出来了。那只需要一次插值就行了。

稍有卡常。
注意这里 \(t\) 要取到 \(n+2\),并且概率那里要把 max 去掉,这样在 \(t>m\) 的时候也符合多项式的性质。
复杂度 \(O(n^3)\)

CF103E

题目条件限制很诡异啊。什么叫,任意 \(k\) 个集合的并集大小不小于 \(k\)???
md 想了一年终于反应过来 Hall 定理。
构造一个二分图,左 \(i\) 到右 \(j\) 有边,当且仅当集合 \(i\) 中包含 \(j\)
那这个二分图是有完美匹配的。

这个完美匹配有什么用呢?
额,你任意抠下来一个完美匹配。
然后我可以通过一些置换,使得左 \(i\) 匹配右 \(i\)
那进一步地,残量网络上,\(i\)\(j\) 有边,就代表我假如选了 \(i\),就必须选 \(j\)
然后就是一个最小权闭合子图。下班。
时间复杂度 \(O(n^{坤})\)

AGC002E

额从大到小排序,画成点阵图,每次要么去掉左边一列,要么去掉下面一行。
然后就直接 DP 必胜或必败态。那么找一下规律发现,对角线上 DP 值是一样的。(这个随便归纳)
然后就取 \((1,1)\) 的一个对角线,往上走,判一下到顶和到右的长度的奇偶性就行了。

P11565

唉。唉。唉。
首先很傻逼的 DP 是,考虑 \(f_{i,j,k,l,0/1}\) 表示第 \(a_i=j,a_{i+1}=k, a_{i+2}=l\),Alice 还是 Bob,的答案。一次只转移两个,即 \(j\) 减二,\(k,l\) 挑一个加一。复杂度不知道多少。

然后我一个一个减二太唐了,考虑我减完是什么形态。
那记 A 和 B 各操作一次为一轮,对于 \(a_i\),除了最后一轮(可能不完整),其他轮一定是 \(k\)\(l\) 各加一。
证明是非构造性(这个词恰当吗)的,感性理解就是,如果一个人最优方案给 \(j\) 加一了,那么另一个人就不能再给 \(j\) 加一了,要不然不就助长对面了。

然后最后一轮的话,对于 \(\lfloor \frac j2 \rfloor\) 为偶数的情况,要分三叉向下递归。为奇数的情况分两叉。
复杂度的话,首先递归层数是 \(O(\log)\) 的,因为每层 \(\sum a_i\) 减半。
然后分叉的话,注意到 \(j,k\) 都是连续的,所以大概分别也是 \(O(\log)\) 的。加上记忆化的 map,总复杂度四个老哥。

CF1320E

首先这个多组询问的形式,闭着眼睛建虚树。

然后考虑怎么算单组询问。
注意到病毒会有【阻断】。然后从下往上 DP 一遍,再从上往下 DP 一遍。复杂度 \(O(|V|)\)。瓶颈在于建虚树。

具体地,DP 维护一个二元组 \((t, j)\),表示 \(u\)\(t\) 时刻被 \(j\) 病毒感染。那我问你这题难在哪。

QOJ17186

这题很牛逼啊。
直接贪肯定搞不了的。
首先考虑一个深度序列 \(dep\) 合法的充要条件是什么。

  • \(\sum_{i=1}^n 2^{-dep_i}=1\)。也即,\(\sum_{i=1}^n \sum_{j=1}^{dep_i} 2^{-j}=n-1\)。这个形式下面要用。

这个刻画见过又忘了/fn

首先本质不同的询问只有 \(O(\log nV)\) 个,因为你要把正常哈夫曼树卡成树高很高的,每次大概要怎么增加一倍。
那我们对于这 \(O(\log nV)\) 个询问,每个都暴力求答案。

对于一个确定的 \(d=O(\log)\),怎么求答案?
画出一个 \(d\times n\) 的表格,我们要选出若干个格子,使得重量等于 \(n-1\),代价最小。
格子 \((i,j)\) 的代价为 \(a_j\),重量为 \(2^{-i}\)。妙妙妙啊!!!

然后要求是,每列都要选一个前缀。(实际上这个限制是假的,因为这里错解一定不优)
然后就是,我们给 \(a\) 升序排序之后,每行也只能选一个前缀了。

关键观察:最后一行一定选偶数个!!!!!证明显然。
又因为只能选前缀,所以最后一行,\(2j\)\(2j-1\) 可以 merge 起来,重量乘二,代价相加。
和倒数第二行归并起来,变成子问题。
答案就是第 \(0\) 行的,前(好像总共也就只有)\(n-1\) 个代价的和。

时间复杂度 \(O(n\log^2nV)\)
当然,如果在对每个 \(d\) 暴力求答案的基础上,上一点手法,统一合并,好像是可以做到一个老哥的。不过没必要。跑了 980ms。

Circular Sushi

好题,做不出来的题。

首先,一个核心结论是,存在一个最优解,选择的时间 \(t\)(显然不会是无理数)的分母是 \(2\) 的幂次(显然这个幂次 \(\le 2^L\))。

官方给了一个看起来很牛逼的证明。

  • \(t=\frac pq\)(最简分数)有 \(q\) 不是 \(2\) 的幂次。令 \(q=2^ex\),其中 \(e\) 为极大的指数。
  • 这样 \(x\) 是奇数,和 \(2^L\) 互质,就有逆元。那么存在 \(y\) 使得 \(y\times 2^L+1=x\)
  • \(t':=t\times x\)。考察在 \(t'\) 时刻取寿司会不会更劣。
  • 不会。因为原来 \(A+t\times V\equiv 0\pmod {2^L}\),现在 \(A+t'\times V=A+(-A)\times x\equiv -y\times 2^L\equiv 0\pmod {2^L}\)
  • 那么就可以拿掉 \(q\) 里面非 \(2\) 的幂次。

然后就可以先令 \(A\gets A\times 2^L,L\gets L\times 2\),转化为只有 \(t\) 为整数的情形。

那么此时用扩欧是可以解出来 \(t\) 的通解的,形如,对于一个 \(i\)\(t\equiv r_i\pmod {2^{k_i}}\) 时,才能加上 \(W_i\) 的贡献。

那么相当于 \(t\) 看成字符串,后缀是 \(r_i\) 时加上贡献。字典树上随便统计一下即可。复杂度 \(O(nL)\)

posted @ 2026-02-19 20:55  Water_M  阅读(16)  评论(1)    收藏  举报