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\dfrac{n}{2}\rfloor 就行了。

正难则反,得到:

Ans=3n2×i=n2+1n(ni)×2niAns=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\dfrac{n}{2}\rfloor+1 开始枚举所以方案一定是无法消去的。

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

需要注意,并不需要考虑重复的情况,因为数量大于 n2+1\lfloor\dfrac{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_1PiP_i 从小到大排序排序,容易理解 P1=1,Pi=n1P_1=1,P_i=n-1

在满足上面要求的同时,还需要满足 k[1,i1]Z\forall k\in[1,i-1]\cap\mathbb{Z} 都有 pk+1pk2p_{k+1}-p_k\le 2

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

而他们之间有满足等式:

k=1i1xk=(k=1i1pi+1pi)(i1)\sum\limits_{k=1}^{i-1}x_k=(\sum\limits_{k=1}^{i-1} p_{i+1}-p_i)-(i-1)

同时:

k=1i1pi+1pi=pip1=n2\sum\limits_{k=1}^{i-1} p_{i+1}-p_i=p_i-p_1=n-2

所以就有:

xk{0,1}k=1i1xk=ni1x_k\in\{0,1\}\wedge\sum\limits_{k=1}^{i-1} x_k=n-i-1

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

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

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

Ans=i=n2n1i×(fifi1)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]

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

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

(2gX2)×2mgX(2^{g_X}-2)\times2^{m-g_X}

如果存在 i<Xi<Xgi=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×(2c1)2\times 2^b\times(2^c-1)

时间复杂度为 O(m2logn)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(y2i)+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&x0g(i)f(x)=f(0)+\sum\limits_{2^i\&x\ne 0} g(i)

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

假设 s1=i=0n1max(g(i),0)s1=\sum\limits_{i=0}^{n-1}\max(g(i),0)s2=i=0n1min(g(i),0)s2=\sum\limits_{i=0}^{n-1}\min(g(i),0)

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

{f(0)+s1kf(0)+s20\left\{\begin{matrix}f(0)+s1\le k \\f(0)+s2\ge 0\end{matrix}\right.

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

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

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

x=i=0n1g(i)x=\sum\limits_{i=0}^{n-1} \lvert g(i)\rverts(x)s(x) 表示 x=i=0n1g(i)x=\sum\limits_{i=0}^{n-1} \lvert g(i)\rvertgg 的方案数。

那么有:

s(x)=[x=0]+i=1n2i×(x1i1)×(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+1x)×s(x)\sum\limits_{x=0}^k(k+1-x)\times s(x)

化简:

x=0ks(x)=1+i=1n2i×(ni)(j=i1k1(j1i1))\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=0ki=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(nlogn)O(n\log n)

ARC115E LEQ and NEQ

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

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

fi,j=fi1,j+k=1Ai1fi1,kf_{i,j}=-f_{i-1,j}+\sum\limits_{k=1}^{A_{i-1}}f_{i-1,k}

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

首先 fjfjf_j\gets -f_j,记 S=fjS=\sum f_j 然后把 fjfj+Sf_j\gets f_j+S,最后把大于 AiA_iff 清理掉。

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

对于整数 x,yx,y 不存在 ii 使得 xAiyx\le A_i\le y,那么显然最后 fxf_xfyf_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(nlogn)O(n\log n)

ARC074E RGB Sequence

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

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

  • 选择与 aia_i 一样的颜色,那么有 fi+1,j,kfi+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,kfi+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,jfi+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>lk<lk<l
  • 如果 x=3x=3,那么要求 j,k>lj,k>l

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