2025.8

[AGC070B] Odd Namori

先不考虑第三个条件,对 \(n\) 个点的基环内向森林计数。

[AGC066C] Delete AAB or BAA

dp,然后转化为判定一个区间 \([l,r]\) 能否删空。

考虑什么样的字符串能够被删空。

首先有 \(c_A=2c_B\)。在此基础上,将 \(2c_B\) 个 A 插入 \(c_B+1\) 个空隙中,必定有一个空隙出现了两个 A,归纳下去即可。然而唯一的问题出在 \(c_B=1\) 时,只剩三个,可能存在形如 ABA 的情况。

我们发现额外要求 \(s_l\ne s_r\) 就可以满足了。这样有 \(2c_B-1\) 个数插入 \(c_B\) 个空隙,此时一定是存在的。

CF2122G Tree Parking

浓浓的 CF 风味数数题。

固定一棵树,方案数为

\[\frac{(2n)!}{2^n\prod siz_i} \]

而一棵树拓扑序的为 \(\frac{n!}{\prod siz_i}\)

所以我们计算拓扑序个数,然后乘上 \(\frac{(2n)!}{n!2^n}\) 即可。

固定拓扑序为 \(1,...,n\),计数有多少棵 \(p_i<i\) 且恰有 \(m\) 个叶子的树。

这等于欧拉数 \(A(n-1,m-1)\),其中 \(A(n,m)\) 表示长度为 \(n\) 且有 \(m\) 个下降的位置的排列个数。

考虑一个双射,我们提取这棵树的一个优先遍历编号较大的儿子的 DFS 序,一个叶子对应了一个 \(p_i>p_{i+1}\) 的位置。显然 \(p_1=1\),所以实际上是长度为 \(n-1\) 的排列。从排列也可以唯一还原一棵树,\(i\) 的父亲实际上等于 \(i\) 前面第一个 \(p_j<p_i\)\(j\)。因为 \(p_1=1\) 所以一定存在。

[ARC198E] Monotone OR

考虑转移式

\[f_i=g_{i-1} \]

\[g_i=\sum_{x,y,x|y=i}f_xa_y \]

相当于我们要完成一个在线的或卷积。

考虑 cdq 的结构,先递归左半边,处理左半边到右半边的贡献,然后递归右半边。按位分治,在 \(x\)\(y\) 最高的不同位完成转移。时间复杂度 \(O(n^22^n)\)

我们发现瓶颈不在做点乘,而在 FWT 和 IFWT,也就是高位前缀和。这可以在分治过程中维护,时间复杂度 \(O(n2^n)\)

CF2122F Colorful Polygon

很有趣的题!

考虑我们可以用一个长方形来造出一个组合数 \(C(a+b,a)\),通过将多个长方形拼起来就可以得到多个组合数的乘积。这种方法比较劣,需要大概 \(1/2ns+O(n)\) 的结点,不太行。

考虑对 \(a_1,...,a_n\) 分治,我们先造出一个 \(C(a_1+...+a_n,a_1+...+a_{[n/2]})\),然后继续递归分治两边,这种方法只需要 \(s\log n+O(n)\) 的结点数,很好。

关于 checker,似乎有论文可以 \(O(n^3)\) 求多边形三角剖分数。

[AGC064D] Red and Blue Chips

一件很奇妙的事情是我在 cf2122 前随机随到了这道题,当时并不会做,补了 cf g 后发现会了这道题。

类似 cf2122g 的结论,如果我们确定 DFS 序的排列 \(p\)\(p_1=n\),则 \(p_i<p_{i+1}\) 的位置对应了所有的叶子结点,在这道题中要求 \(s_{p_i}=R\to p_i<p_{i+1}\)。欲求连接 \(s_{p_1}s_{p_2}...s_{p_n}\) 可得多少种不同的字符串。

考虑如何判定一个字符串是否可以被生成。考虑一条遍历 \(n\) 个点的路径,如果碰到 R 说明下一步必须往右跳,所以贪心选择最靠前的 R 即可。容易改写成 \(O(n^3)\) 的 dp。

然而这个贪心是错的,这里放一个拍出来的 hack:RRBRRBB,正确答案是 15。

但是我们发现修改一下贪心的过程,假设一个 B 前面连着 \(b_i\) 个 R,对 \(b_i\) 从小到大贪心然后判定就对了。可以写出 \(f_{i,j,k}\) 表示只考虑 \(b_*\le i\),占用了 \(j\) 个 B \(k\) 个 R。复杂度是调和级数 \(O(n^3\log n)\)

[ABC367G] Sum of (XOR^K or 0)

实际上让我们做的事情就是求 \([x^o][y^0]\prod (1+x^{a_i}y)\)

如果不带 \(y\) 那么是经典的,考虑 \(\prod FWT(1+x^{a_i})\),求出在这一位上 FWT 为 0/2 的个数然后可以计算。这里关键是如何理解 \(1+x^{a_i}y\) 的 FWT。

考虑 \(y\) 这一元实际上代表了在模 \(k\) 意义下选的个数,用之前的技巧求出假设有 \(c_0\)\(0\)\(c_2\)\(2\),预处理 \((-1)^0C(c_2,0)+(-1)^kC(c_2,k)+(-1)^{2k}C(c_2,2k)+...)\) 即可,具体来说是 \([x^0](1-x)^{c_{0}}(1+x)^{c_{2}}\)。设 \(dp_{i,j}\) 表示 \(i\) 个选了模 \(k\) 意义下的 \(j\) 个,可以递推。

CF1119H Triple

还是之前的套路。

用生成函数重新描述:

\[\prod_{i=1}^n (c_1x^a+c_2x^b+c_3x^c) \]

考虑将一个小多项式做 FWT 的结果,必然只存在 \(\pm c_1\pm c_2\pm c_3\)

这里有 8 个未知数,所以需要 8 个方程来解。太多了,所以要稍微简化一下。

提取公因式,

\[\prod_{i=1}^n x^a(c_1+c_2x^ax^b+c_2x^ax^c) \]

,令 \(b'=b\oplus a,c'=c\oplus a\)

现在就只有仅仅 \(4\) 种情况了。设四种情况的个数分别是 \(x_0\sim x_3\)

构造

\[FWT(\sum x^{b'}) \]

\[FWT(\sum x^{c'}) \]

\[FWT(\sum x^{b'}x^{c'})=FWT(\sum x^{b'\oplus c'}) \]

设上面三个 FWT 在某一项上为 \(p_1,p_2,p_3\)

\[x_0+x_1+x_2+x_3=n \]

\[-x_0-x_1+x_2+x_3=p_1 \]

\[-x_0+x_1-x_2+x_3=p_2 \]

\[x_0-x_1-x_2+x_3=p_3 \]

然后就能一一解出四个未知数了。

CF1103E Radix sum

即求 \([x^o]\left(\sum x^{a_i}\right)^n\)

[AGC066D] A Independent Set

一个重要的性质是如果我们关注所有连续的 ABABABA...,则每一段存在一个 A 的位置是相较于初始位置没有动的。所以对不动点做 dp,设 \(f_i\) 表示第 \(i\) 个 A 作为一个不动点,这样状态数就被优化到了 \(O(n)\) 量级,转移 \(O(n^2)\)。经过优化也可以做到 \(O(n)\) 转移。

具体地,考虑两个不动点 \(i\)\(j\)\(i<j\),如何计算 \(i\)\(j\) 之间的花费 \(w(i,j)\)

  • \(i\) 后面的向后推,直到推不动为止,记此时为 \(p\)
  • \(j\) 前面的向前推,直到推不动为止,记此时为 \(q\)
  • 必须满足 \(p+1=q\) 才能转移。
  • 另外还需要满足 \(2(j-i+1)\le pos_j-pos_i+2\),不然显然放不下。

单调栈求出向前能推到的位置和向后能推到的位置,前缀和求出向前和向后需要的代价。转移需要排序,\(O(n\log n)\),使用桶排容易线性。

[AGC067B] Modifications

蒜头的奖杯

最终的式子是:

\[\sum_{g}\sum_{(d_1,d_2)=1}D'_{d_1g}E'_{d_2g}A'_{d_1d_2g}\sum_{d_1g\mid j}\sum_{d_2g\mid k}B_jC_kF_{(j,k)} \]

注意到 \(d_1d_2g\le n\),枚举 \(d_1,d_2,g\) 的复杂度最多是 \(O(\sum_g (n/g)\log (n/g))\)

[AGC052D] Equal LIS

设整个序列的 LIS 为 \(l\)。如果 \(l=2k\) 则容易构造,否则设 \(l=2k+1,k\in N\)

有很多必要条件都很好找,考虑如果长度为 \(l\) 的 LIS 不唯一,则一定有解。

否则,存在唯一的 LIS,我们关注不在 LIS 之中的数 \(p\),如果 \(f_p+g_p-1\ge k+1\),则可以将 \(p\)\(p\) 前面 \(<p\) 的以及 \(p\) 后面 \(>p\) 的组成一个长度为 \(k+1\) 的 LIS,将 \(l\) 个数中剩余的 \(k+1\) 个组成一个长度为 \(k+1\) 的 LIS。

【MX-X14-T7】墓碑密码

题解

最新颖的地方是记录压位的正负号 \(O(\frac{n2^m}{\log n})\) 求出 \(\sum x^{a_i}\) 的 FWT。

[AGC056D] Subset Sum Game

如果 \(l=0\),那么获胜当且仅当 \(a_1+a_3+a_5+...\le r\)

考虑第一次 \(s\ge l\),那么此时胜负就已定了。

Bob 的目标实际上就是让 \(s\ge l\) 的时候最大化 \(s+a_1+a_3+...\)

也可以说 Bob 有两个备选方案,要么让 \(s<l\) 要么让 \(s>r\)。在某个时刻前 Bob 的目标是前者,经过某个时刻变成了后者。

以上思路都是错的。

考虑一个相似的问题,\(n=2k\),但是 Bob 先手。结论是将 \(a_{2k},a_{2k+1}\) 两两配对,若 Bob 选择了其中一个,Alice 的策略一定是选择与之配对的另一个。结论是 Alice 必胜当且仅当 \(\sum a_{2k}\ge l\)\(\sum a_{2k+1}\le r\)

考虑将这题转化为 Bob 先手,枚举 Alice 选的第一个数。但是这是 \(n\) 是奇数,所以还要枚举 Alice 给 Bob 余下来的最后一个数。

CF2089C2 Key of Like (Hard Version)

条件概率公式:

\[P(A|B)=P(AB)/P(B),P(B)\ne 0 \]

贝叶斯公式:

\[P(A|B)=P(B|A)P(A)/P(B),P(B)\ne 0 \]

利用以上公式就能推出所有式子。

得到的结论是:假设有 \(m\) 把🔒,\(m+k\) 把🔑,如果第一次尝试匹配第一把🔒和第一把🔑成功了,则转化到 \(m-1,m-1+k\);否则有等概率用另一把钥匙匹配第一把🔒或者以第一把🔑匹配另一把锁,随后用同样的继续匹配直到匹配成功或是得到了一把空钥匙,转化到 \(m-1,m-1+k\)\(m,m+k-1\)(空钥匙)。

利用期望的线性性拆成每个人成功的概率。设 \(f_{i,j,r}\) 表示 \(m=i,k=j\),当前轮到了第 \(r\) 个人。容易写出一个 \(O(nm^2k)\) 或者 \(O(n^2mk)\) 的 dp,优化很容易,对 \(r\) 转个圈即可。

CF2079D Homework

先考虑操作能够生成的空间。考虑有两个数 \(x,y\),则能够生成的数是 \(x,y,x\oplus y\)

考虑这题中的操作等价于选择 \(i\ne j\)\(a_i:=a_j\oplus a_i\)。由于操作不改变线性基的秩,因此能够将 \(a\) 变成 \(b\) 当且仅当 \(\{a\},\{b\}\) 秩相等且能够生成的线性空间完全一样。复杂度 \(O(n\sqrt{n}/w)\)

[AGC059D] Distinct Elements on Subsegments

考虑相邻的变化,若是从 \(x\to x+1\),则说明 \([l+1,l+k-1]\) 内部仅存在 \(a_l\) 而不存在 \(a_{l+k}\);若是从 \(x\to x-1\) 则说明存在 \(a_{l+k}\) 不存在 \(a_l\);若是 \(x\to x\) 则有两种情况:要么 \(a_l,a_{l+k}\) 同时存在,要么同时不存在。

不妨先假设不存在第三种情况。“不存在”的限制是容易满足的,只要新开一种颜色即可;而“存在”的限制相对困难。所以钦定一些 \((x,y)\) 对满足 \(a_x=a_y\)。也就是一些匹配。设 \(L\)\([l+1,l+k-1]\) 存在 \(a_l\)\(l\) 组成的集合,\(R\)\([r-k+1,r-1]\) 中存在 \(a_r\)\(r\) 组成的集合,则 \(x\in L\) 能够匹配 \(y\in R\) 当且仅当 \(x<y<x+k\)。一个必然要满足的限制是 \(|L|=|R|\),最优策略当然是依次匹配。

现在考虑第三种情况,也就是有两种选择:同时往 \(L\) 加入 \(l\)、往 \(R\) 加入 \(l+k\) 或否。注意到若 \(b_i=k\) 则必须选择第二种,否则选择加入一定是不劣的。

[AGC057D] Sum Avoidance

\(n=[\frac{S-1}2]\),则

引理 1: \(|A|=n\)
引理 2:\(1\le s\le n\)\(s\in A\)\(n-s\in A\) 恰好成立其一。
引理 3:\(B=A\cap [1,n]\)\(a,b\in B,a+b\le n\),则 \(a+b\in B\)
引理 4:\(B\) 合法(满足 引理 3),则对应的 \(A\) 也合法。

从小到大枚举 \(i=1,..,n\),若 \(B\) 中已有元素可以得到 \(i\) 或加入 \(i\) 后仍然不能凑出 \(S\) 则将 \(i\) 加入集合 \(B\) 中。

现在的问题变为优化上述步骤。这个很类似同余最短路。首先第一个被加入的数就是使 \(d|n\) 不满足的最小的 \(d\),这样的 \(d\) 不会很大,具体地 \(d\le 50\)。按照模 \(d\) 分类,对于第一种情况下加入的数不会超过 \(d\) 个,找到这些数,维护一个同余最短路状物即可。最后利用同于最短路的 dp 数组二分找集合中的第 \(k\) 小。

Median Replace Hard

手玩几种情况发现都存在一个简单的 dp,而 dp 的本质是一个能接受所有状态的 DFN!所以大胆猜测所有情况下一定存在一个 \(O(1)\) 大小的 DFN。

考虑如何爆搜,我们设置一个阈值 \(L=10\)。我们认为两个状态 \(s,t\) 等价当且仅当任意一个 \(|w|\le L\)\(w\) 对于 \(s+w\)\(t+w\) 的合法性相同。用 bfs 的方式从已有状态中扩展得到新的状态即可。伪代码如下:

queue<int> Q;
Q.push(初始状态);
while(!Q.empty()){
  当前状态=Q.front();
  Q.pop();
  令后继状态=当前状态+0/1;
  若后继状态与某个已有状态等价则无事发生
  否则 Q.push(后继状态);
}

预处理 DFN 之后就可以进行 \(O(n|S|)\) 的 dp 了,经过打表 \(|S|\) 最大在二三十左右。

2077D - Maximum Polygon

没做出来,太菜了。

一个必须要记住的结论是任意大于 \(O(\log V)\) 个点必能构成一个多边形(三角形)。

枚举最大值,然后考虑一个贪心。从前往后,维护一个子序列,判断能否删除末尾的几个元素使得加入 \([i,n]\) 仍然合法,最后把 \(i\) 加入子序列。这样是 \(O(n^2)\) 的。

注意到,如果最大值不存在于最大的 \(O(\log V)\) 个点中则一定不优。因为仅有前 \(O(\log V)\) 个点已经能构成一个多边形。

2077E - Another Folding Strip

考虑一个贪心,从前往后,记录两个变量 \(x,y\),分别表示奇数和偶数末尾的数量。每次到 \(i\)\(\max(0,x-a_i)\to x,y+a_i\to y\) 然后 swap(x,y)。答案是 \(x+y\)

注意到 \(x\)\(y\) 是独立的,可以分别计算 \(\sum x\)\(\sum y\)。稍微改写一下形式变成了最大后缀和,也就是 \(s_r-\min s[l-1,r]\)。拆成两项 \(s_r\)\(-\min s[l,r]\),使用单调栈维护。

H. Kevin and Strange Operation

好题。

任意一个数在经过若干次操作之后,会变成的是以它开始的一段区间的 max。想象有两个集合 \(L,R\) 分别表示 \(l_i\) 延申到了 \(r_i\)。那么一次操作就是选择一个位置 \(p\),从 \(L\) 中删去 \(p\),删掉 \(R\) 的第一个元素。

容易发现,最后得到的 \(R\) 一定是 \(n,n-1,n-2,...\)。而 \(L\) 我们可以任选。设 \(f_{i,j}\) 表示 \(i\) 匹配的是 \(j\)。从 \(f_{i,*}\) 转移到 \(f_{i-1,*}\)。可以用线段树维护整个 \(f_{i,*}\) 序列,或者更简便的实现可以使用树状数组,利用单调性可以继续优化至线性。

2057E2 - Another Exercise on Graphs (hard version)

做了很久。

结论是只有最小生成树上的边是有用的,边数从 \(O(n^2)\) 降低为 \(O(n)\)

CF2089D Conditional Operators

分讨题,但是 Median Replace Hard。

考虑这题是 Median Replace Hard 的一种特例情况,所以套用上面的做法即可。

D. Flower-like Pseudotree

既然不能有自环,那我们就造一个二元环。

CF2115E Gellyfish and Mayflower

Secret Message

数竞题。

构造 5 种答案,使得总和为 \(s+p\)

那么想到五染色,选择包含这种颜色的所有点,另外将不能被这种颜色包含的点纳入集合,可以发现总和恰为 \(s+p\),于是总是存在一个 \(\le 1/5 (s+p)\)

AND x OR

充要条件:\(a\) 序列和 \(b\) 序列完全相同,或者存在 \(i\ne j,b_i\subseteq b_j\)

必要性:

考虑最后一次操作,必然有 \(x\subseteq b_j\)\(b_i\subseteq x\)

充分性:

无论初始时 \(a_i,a_j\) 如何,都可以使用如下方式将 \(a_i\) 变为 \(b_i\),将 \(a_j\) 变为 \(b_j\)

  • \(f(a_i,a_j,2^{30}-1)\)
  • \(f(a_i,a_j,0)\)
  • \(f(a_i,a_j,b_i)\)
  • \(f(a_j,a_i,b_j)\)
posted @ 2025-07-20 22:27  Network_Error  阅读(97)  评论(2)    收藏  举报