2023.4.24 从天堂掉落到深渊 多无奈

发布时间 2023-04-24 21:49:55作者: Nesraychan

「AGC060C」Large Heap

这个题赛时只做了 15min,而 B 做了快 1.5h。。。

发现到 \(U,V\) 的路径是一条向左延伸,长度为 \(A\) 的链,和一条向右延伸,长度为 \(B\) 的链。记 \(f(i,j)\) 表示,左侧的链长为 \(i\),右侧长为 \(j\),路径上的点均比两端点小的概率。

转移系数为 \(\frac{2^{n-i+1}-1}{2^{n-i+1}+2^{n-j+1}-2}\)\(\frac{2^{n-j+1}-1}{2^{n-i+1}+2^{n-j+1}-2}\),这容易看出。

时间复杂度 \(O(AB)\)

「AGC059C」Guessing Permutation for as Long as Possible

为什么我赛时不会这个题???为什么我现在还是不会这个题???

每次询问相当于给边 \((a_i,b_i)\) 定向,而在询问之前知道大小关系,就相当于存在一条 \(a_i->b_i\) 或者 \(b_i->a_i\) 的路径。

事实上,我们只需要考虑路径上恰有三个点的情况(因为存在其他的限制)。这相当于每个元素有两种状态,每次限制要求某两个元素的状态相同,求所有合法的元素状态数。

使用并查集求解,时间复杂度 \(O(n^3logn)\)

「AGC060D」Same Descent Set

牛逼题。

\(F(S)\) 表示大于号集合为 \(S\) 的排列个数,则答案为 \(\sum_SF(S)^2\)

同时有小于和大于的限制,我们一般把大于号容斥成小于和无限制。记录 \(G(S)\) 表示无限制的集合为 \(S\),所有合法的排列数。有 \(F(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}G(T)\)。于是

\[\sum_SF(S)^2=\sum_S(\sum_{T\subseteq S}(-1)^{|T|}G(T))^2=\sum_{T_1,T_2}(-1)^{|T_1|+|T_2|}G(T_1)G(T_2)2^{n-1-|T_1\cup T_2|} \]

\(P(S)=\frac{(-1)^{|S|}G(S)}{2^{|S|}}\),则答案又等于

\[2^{n-1}\sum_{T1,T2}P(T_1)P(T_2)2^{|T_1\cap T_2|} \]

这是一个可以 \(O(n^3)\) 求解的形式(\(G(S)\) 可以通过组合数计算)。

以上是我自己想出来的部分,后面的优化我怎么也想不到啊。。。

考虑 \(T_1\cap T_2\) 的本质,它将原来的序列划分成了 \(|T_1\cap T_2|+1\) 段,这些段内的每个位置,两个限制中至少保留一个;而中间的分割点,两个限制均不保留。记 \(A(x)\) 表示长度为 \(x\) 的序列,满足要求的生成函数。答案就是 \((n!)^22^{n-2}[x^n]\frac{1}{1-2A(x)}\)

使用多项式求逆解决,时间复杂度 \(O(nlogn)\)

「AGC058D」Yet Another ABC String

容斥哪些位置是一个不合法子串的开头,注意到两个相近的位置可以合并,于是考虑所有极长段,这是经典的。

由于所有模 \(3\)\(2\) 的极长段的容斥系数为 \(0\),所以我们只需枚举所有模 \(3\)\(0\)\(1\) 的段的个数就可以做到 \(O(n^2)\)

但我们可以只枚举模 \(3\)\(1\) 的段,剩下的可以通过推组合数式子优化。

时间复杂度 \(O(n)\)

「AGC054C」Roughly Sorted

每次的操作肯定是选一个这样的位置:不满足题意,且向前交换可以使逆序对减少。

那终止状态中,以其为结尾的逆序对数量恰为 \(k\) 的位置才可能是被交换而来的。而这些位置放在其后继的任意位置也都满足题意。

时间复杂度 \(O(nlogn)\)