AGC040C Neither AB nor BA

很难发现其实删除不会改变元素位置的奇偶性,所以只需要把奇数位置的 A\texttt{A} 和 B\texttt{B} 互换就行了。

那么现在就是 AA\texttt{AA} 和 BB\texttt{BB} 不能删除,所以只需要 A\texttt{A} 和 B\texttt{B} 的数量都不超过 ⌊n2⌋\lfloor\frac{n}{2}\rfloor 就行了。

正难则反,得到:

Ans=3n−2×∑i=⌊n2⌋+1n(ni)×2n−iAns=3^n-2\times \sum\limits_{i=\lfloor\frac{n}{2}\rfloor+1}^n {n\choose i}\times 2^{n-i}

显然,所有的方案数是 3n3^n 因为每一个位置都有 22 种方案。

然后枚举 A\texttt{A} 或者 B\texttt{B} 的数量,从 ⌊n2⌋+1\lfloor\frac{n}{2}\rfloor+1 开始枚举所以方案一定是无法消去的。

选择 ii 个位置填 A\texttt{A} 或者 B\texttt{B},其它的位置乱填就行了。

需要注意,并不需要考虑重复的情况,因为数量大于 ⌊n2⌋+1\lfloor\frac{n}{2}\rfloor+1 的元素肯定只有一种。

通过合理的实现,可以做到 O(n)O(n)。

AGC023C Painting Machines

这么好的 25002500 的题目为什么不评紫。

考虑枚举排列 PP 的得分 ii,但是想要快速计算比比较困难。

所以考虑设 fif_i 表示操作了前 ii 个之后全部染黑的方案数,需要注意并不是恰好 ii 次。

对于一个第 ii 次操作之后就全部被染黑的方案 PP,从 [1,i][1,i] 的顺序是不重要的,影响答案的只有在 ii 之前选择了哪些。

那么我们将 P1P_1 到 PiP_i 从小到大排序排序,容易理解 P1=1,Pi=n−1P_1=1,P_i=n-1。

在满足上面要求的同时,还需要满足 ∀k∈[1,i−1]∩Z\forall k\in[1,i-1]\cap\mathbb{Z} 都有 pk+1−pk≤2p_{k+1}-p_k\le 2。

我们记 xk=pk+1−pk−1x_k=p_{k+1}-p_k-1,那么显然所有 xk∈{0,1}x_k\in\{0,1\}。

而他们之间有满足等式:

∑k=1i−1xk=(∑k=1i−1pi+1−pi)−(i−1)\sum\limits_{k=1}^{i-1}x_k=(\sum\limits_{k=1}^{i-1} p_{i+1}-p_i)-(i-1)

同时:

∑k=1i−1pi+1−pi=pi−p1=n−2\sum\limits_{k=1}^{i-1} p_{i+1}-p_i=p_i-p_1=n-2

所以就有:

xk∈{0,1}∧∑k=1i−1xk=n−i−1x_k\in\{0,1\}\wedge\sum\limits_{k=1}^{i-1} x_k=n-i-1

那么显然 xx 的方案数就是 (i−1n−i−1)i-1\choose n-i-1,再乘上排列 PP 带来的贡献,得到:

fi=(i−1n−i−1)×i!×(n−i−1)!f_i={i-1\choose n-i-1}\times i!\times (n-i-1)!

所以得分为 ii 的数量就是 fi−fi−1f_i-f_{i-1},那么就有:

Ans=∑i=⌈n2⌉n−1i×(fi−fi−1)Ans=\sum\limits_{i=\lceil\frac{n}{2}\rceil}^{n-1} i\times (f_{i}-f_{i-1})

时间复杂度为 O(n)O(n)。

ARC093E Bichrome Spanning Tree

设 fif_i 表示强制选第 ii 条边的最小生成树的权值,设 gi=∑j=1n[fj=i]g_i=\sum\limits_{j=1}^n [f_j=i]。

如果不存在 i≤Xi\le X 存在 gi≠0g_i\ne 0,那么显然是没有解的,因为进行的操作只能增大生成树的值。

如果 gX≠0g_{X}\ne 0 且 ∀i<X\forall i<X 都有 gi=0g_i=0,那么显然这个图的最小生成树就是答案需要的,那么只要这 gXg_X 条边存在一个颜色不一样就可以了,所以方案数为:

(2gX−2)×2m−gX(2^{g_X}-2)\times2^{m-g_X}

如果存在 i<Xi<X 且 gi=0g_i=0,那么:

  • 如果 fi<Xf_i<X,显然需要全部染成一个颜色。
  • 如果 fi>Xf_i>X,因为反正都不会影响答案所以可以随便填。
  • 如果 fi=Xf_i=X,那么只需要不是全部都与 fi<Xf_i<X 的颜色一样就行了。

设上面的情况分别有 a,b,ca,b,c 条边满足,那么方案数就是 2×2b×(2c−1)2\times 2^b\times(2^c-1)。

时间复杂度为 O(m2log⁡n)O(m^2\log n),但是并查集的 log⁡\log 能叫 log⁡\log 吗?

ARC144D AND OR Equation

设 x<2ix< 2^i,那么由题可以得到:

f(x)+f(2i)=f(0)+f(2i+x)f(x)+f(2^{i})=f(0)+f(2^{i}+x)

进而可以得到:

f(2i+x)=f(x)+f(2i)−f(0)f(2^{i}+x)=f(x)+f(2^{i})-f(0)

设 y=2i+xy=2^{i}+x,那么有:

f(y)=f(y−2i)+f(2i)−f(0)f(y)=f(y-2^{i})+f(2^{i})-f(0)

容易发现 yy 的最高位是第 ii 位的时候满足上式。

那么容易理解,只需要 f(0)f(0) 和所有的 f(2x)f(2^x) 确定下来,那么 ff 就整个确定了。

设 g(i)=f(2i)−f(0)g(i)=f(2^i)-f(0),那么:

f(x)=f(0)+∑2i&x≠0g(i)f(x)=f(0)+\sum\limits_{2^i\&x\ne 0} g(i)

假设 gg 已经确定,考虑合法的 f(0)f(0) 的数量。

假设 s1=∑i=0n−1max⁡(g(i),0)s1=\sum\limits_{i=0}^{n-1}\max(g(i),0),s2=∑i=0n−1min⁡(g(i),0)s2=\sum\limits_{i=0}^{n-1}\min(g(i),0)。

因为 0≤f(x)≤k0\le f(x)\le k,所以必然有:

{f(0)+s1≤kf(0)+s2≥0\left\{\begin{matrix}f(0)+s1\le k \\f(0)+s2\ge 0\end{matrix}\right.

所以解的个数为 k−s1+s2+1k-s1+s2+1。

然而因为 s1−s2=∑i=0n−1∣g(i)∣s1-s2=\sum\limits_{i=0}^{n-1} \lvert g(i)\rvert,所以方案数为:

k+1−∑i=0n−1∣g(i)∣k+1-\sum\limits_{i=0}^{n-1} \lvert g(i)\rvert

设 x=∑i=0n−1∣g(i)∣x=\sum\limits_{i=0}^{n-1} \lvert g(i)\rvert,s(x)s(x) 表示 x=∑i=0n−1∣g(i)∣x=\sum\limits_{i=0}^{n-1} \lvert g(i)\rvert 时 gg 的方案数。

那么有:

s(x)=[x=0]+∑i=1n2i×(x−1i−1)×(ni)s(x)=[x=0]+\sum\limits_{i=1}^n 2^i\times{x-1\choose i-1}\times {n\choose i}

枚举 00 的个数,符号可以乱填,最后把 xx 的和分配到 ii 个数上要求非空。

所以答案就是:

∑x=0k(k+1−x)×s(x)\sum\limits_{x=0}^k(k+1-x)\times s(x)

化简:

∑x=0ks(x)=1+∑i=1n2i×(ni)(∑j=i−1k−1(j−1i−1))\sum\limits_{x=0}^k s(x)=1+\sum\limits_{i=1}^n 2^i\times{n\choose i}(\sum\limits_{j=i-1}^{k-1}{j-1\choose i-1})

后面似乎是 朱世杰恒等式 ,所以得到:

1+∑i=1n2i×(ni)×(ki)1+\sum\limits_{i=1}^n 2^i\times{n\choose i}\times {k\choose i}

另外一个式子:

∑x=0kx×s(x)=∑x=0k∑i=1n2i×(ni)×(xi)×i\sum\limits_{x=0}^k x\times s(x)=\sum\limits_{x=0}^k\sum\limits_{i=1}^{n}2^i\times{n\choose i}\times{x\choose i}\times i

那么同样的可以得到:

∑i=1n2i×(ni)×i×(k+1i+1)\sum\limits_{i=1}^n2^i\times{n\choose i}\times i\times {k+1\choose i+1}

所以:

Ans=(k+1)×(1+∑i=1n2i×(ni)×(ki))−∑i=1n2i×(ni)×i×(k+1i+1)Ans=(k+1)\times (1+\sum\limits_{i=1}^n 2^i\times{n\choose i}\times {k\choose i})-\sum\limits_{i=1}^n2^i\times{n\choose i}\times i\times {k+1\choose i+1}

时间复杂度为 O(nlog⁡n)O(n\log n)。

ARC115E LEQ and NEQ

让我很有启发的数据结构题。

考虑 DP,设 fi,jf_{i,j} 表示填了前 ii 个位置第 ii 个位置为 jj 的方案数,那么显然有暴力的转移方程:

fi,j=−fi−1,j+∑k=1Ai−1fi−1,kf_{i,j}=-f_{i-1,j}+\sum\limits_{k=1}^{A_{i-1}}f_{i-1,k}

那么考虑滚动数组,那么转移方式如下:

首先 fj←−fjf_j\gets -f_j,记 S=∑fjS=\sum f_j 然后把 fj←fj+Sf_j\gets f_j+S,最后把大于 AiA_i 的 ff 清理掉。

那么对于这个操作,容易想到可以使用线段树进行维护,时间复杂度为 O(V+nlog⁡V)O(V+n\log V) 而空间复杂度是 O(V)O(V) 的无法接受。

对于整数 x,yx,y 不存在 ii 使得 x≤Ai≤yx\le A_i\le y,那么显然最后 fxf_x 和 fyf_y 的答案是一样的,那么我们考虑把这些一样的给塞到一起。

令 Find(Ai)Find(A_i) 为比 AiA_i 大的最小的元素,那么考虑对以上的操作有什么影响:

显然把所有的数全部取反和计算所有 ff 的和 SS 是没有影响的,唯一影响的就是区间加 SS 操作。

对于区间加操作,原本的加 SS 就应该改成 (Find(Ai)−i)×S(Find(A_i)-i)\times S。

考虑怎么初始化,显然应该有 fi=Find(Ai)−if_i=Find(A_i)-i,时间复杂度为 O(nlog⁡n)O(n\log n)。

ARC074E RGB Sequence

完全没有见过的一种 DP 设法,设 fi,j,kf_{i,j,k} 表示当前考虑到了第 ii 个位置,最靠近第 ii 个位置的颜色不一样的位置是 jj,与 aia_i 和 aja_j 都不一样的最靠后的元素为位置为 kk 的方案数。

先不考虑限制,容易理解转移分别就是枚举三种情况:

  • 选择与 aia_i 一样的颜色,那么有 fi+1,j,k←fi+1,j,k+fi,j,kf_{i+1,j,k}\gets f_{i+1,j,k}+f_{i,j,k}。
  • 选择与 aja_j 一样的颜色,那么有 fi+1,i,k←fi+1,i,k+fi,j,kf_{i+1,i,k}\gets f_{i+1,i,k}+f_{i,j,k}。
  • 选择与 aka_k 一样的颜色,那么有 fi+1,i,j←fi+1,i,j+fi,j,kf_{i+1,i,j}\gets f_{i+1,i,j}+f_{i,j,k}。

考虑把限制挂在右端点,那么对于一个要求 (l,i,x)(l,i,x) 就相当于对一些下标有一些要求:

  • 如果 x=1x=1,那么要求 j,k<lj,k<l。
  • 如果 x=2x=2,那么要求 j>lj>l,k<lk<l。
  • 如果 x=3x=3,那么要求 j,k>lj,k>l。

时间复杂度为 O(n3)O(n^3)。