做题记录 25.10.17

· · 个人记录

\textcolor{black}\odot AT_agc027_e [AGC027E] ABBreviate

设最终将 s 缩为字符串 t,则 t 的每个字母对应 s 的一个区间,即 s 对应区间可以缩为一个字母,考虑怎样的字符串可以缩为一个字母

\text a1\text b2,在 \bmod 3 意义下求前缀和,显然题目的操作不改变整个字符串 \bmod 3 意义下的总和,因此若一个字符串 \bmod 3 下和为 0,则必然不能缩为一个字母

显然字符串 \text a\text b 交错时也不能缩为一个字母(除非初始长度就是 1

定理 \text 1:对于 n=|s|>1s,若 \sum_i (1+[s_i=\text b])\equiv 0\pmod 3 且存在 1\le k<n 使得 s_k=s_{k+1},则 s 必然可以缩为一个字母

证明:

显然最终得到的字母与初始的字符串总和 \bmod 3 相同,若初始串总和 b\bmod31 则缩为 \text a,若为 2 则缩为 \text b

因此对于一个字符串,无论是否满足存在相邻相同字符,其理论上能缩到的字符都是确定的

特判初始的 s 就是 \text a\text b 交替的情况,显然此时答案为 1

定理 \text 2:假设在不满足存在相邻相同字符的情况下 s 缩为 t,则一定存在合法的操作方法同样能得到 t

证明:

p_i=\sum_{j=1}^i (1+[s_j=\text b])\bmod 3,则转化为每次可以选择一个 [l,r] 满足 p_r\ne p_{l-1},将 s[l:r] 替换为 (p_r-p_{l-1})\bmod 3

f_i 表示 [1,i] 的答案,令 pr_{i,j} 表示 [1,i) 中最后一个 p_x=jx,不存在则为 0,则 f_i=[p_i\ne 0]+\sum_{c=0}^2[p_i\ne c]f_{pr_{i,c}},正确性显然

时间复杂度 O(n)

代码

参考

\textcolor{black}\odot AT_arc188_d [ARC188D] Mirror and Order

显然 s_{1\sim n}1\sim n 开头的分别有恰好一个,t_{1\sim n}1\sim n 开头的分别有恰好一个,即 s\cup t1\sim n 开头的分别有恰好两个,因此排名 2i-12i 的必然都以 i 开头

显然 2i-12i 不能同时属于 ab,特判这种情况答案为 0

令初始第 i 个序列中间一项为 c_i

显然若 a_x=2i-1,b_y=2ic_x<c_y,反之若 a_x=2i,b_y=2i-1c_x>c_y

令小的 c 向大的连边,对于确定的 b,显然得到的图视为无向图后所有连通块都是环,若存在有向环则无解

考虑重排所有 (a_i,b_i)\mid_{i=1}^n,使得 \left\lceil \frac{a_i}2\right\rceil=i,设此时 \left\lceil\frac{b_i}2\right\rceil=p_i(若 b_i=-1p_i=-1

i\to p_i 当且仅当 2\mid a_{p_i}i\gets p_i 当且仅当 2\nmid a_{p_i}

要求不能有一个环内方向都相同,即要求一个环内 a_{p_i} 奇偶性不完全相同

遍历所有已经确定的环,若存在奇偶完全相同则答案为 0

去掉环后剩余若干链,设其中 2\mid a_{p_i} 的有 c_0 条,2\nmid a_{p_i} 的有 c_1 条,二者兼有的有 c_2

转化为 c_0 个红色点,c_1 个蓝色点,c_2 个双色点,要将它们组合为若干环,使得不存在一个环为同色的

考虑容斥,钦定有 k 个红色环,它们由 i 个红色点组成,钦定有 l 个蓝色环,它们由 j 个蓝色点组成,显然容斥系数为 (-1)^k (-1)^l

g_{i,j} 表示 i 个点组成 j 个环的方案数,则答案为

\sum_i\sum_j\sum_k\sum_l \binom{c_0}i\binom{c_1}j(-1)^k(-1)^l g_{i,k}g_{j,l} (c_0+c_1+c_2-i-j)!

其中 (c_0+c_1+c_2-i-j)! 表示剩余 c_0+c_1+c_2-i-j 个点任意成环的方案数

f_i=\sum_j (-1)^j g_{i,j} 表示所有长度为 i 的排列 p(-1)^{s(p)} 之和,其中 s(p) 表示 p 的置换环数量,则答案为

\sum_i\sum_j \binom{c_0}i\binom{c_1}jf_if_j (c_0+c_1+c_2-i-j)!

可证 f_0=1,f_1=-1,f_{ge 2}=0,因此答案可 O(1) 算出

总时间复杂度 O(n)

代码

参考