[AGC058D]Yet Another ABC String

Posted StaroForgin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[AGC058D]Yet Another ABC String相关的知识,希望对你有一定的参考价值。

Yet Another ABC String

题解

首先看到这个题,一个方向是去考虑容斥。
可以发现,如果有连续不合法部分的话,可以发现,他一定是一段连续的 . . . A B C A B C A B C A B C . . . ...ABCABCABCABC... ...ABCABCABCABC...
这是一个非常好的性质,因为如果我们之间容斥不合法位置的起点集合的话是非常麻烦的,这可以让我们得到一个非常好的转化。
每次强制原串中的一些部分呈现我们上面所说的这样的连续段,容斥我们这些连续段的集合。

考虑选择一个这样长度为 n n n的段,它所贡献容斥系数。
手推一下前几项可以发现,容斥系数在模 3 3 3 0 0 0的位置上为 − 1 -1 1,在模 3 3 3 1 1 1的位置上为 1 1 1,模 3 3 3 2 2 2的位置上为 0 0 0
证明大概可以考虑通过递推式归纳证明,不是很会证明。(先留个坑)
好的,既然知道这东西了,我们也就很容易设计出来一个 d p dp dp转移。
由于有效的要么是模 3 3 3 0 0 0,要么模 3 3 3 1 1 1,相当于要么让所有数都减去同样的个数,要么在这基础上挑一个数多减一次。
定义 d p i , j dp_i,j dpi,j表示在构造一个长度为 i i i的串,让每个数减去 i − j 3 \\fraci-j3 3ij,并且,进行 j j j次挑一个数多减 1 1 1的操作,得到的总系数和。
可以得到其转移式:
d p i , j = d p i − 1 , k − 1 + ∑ k = 1 min ⁡ ( i , 3 j + 1 ) [ k ≡ 1 ( m o d 3 ) ] d p i − k , j − k − 1 3 − 3 [ k ≡ 0 ( m o d 3 ) ] d p i − k , j − k 3 dp_i,j=dp_i-1,k-1+\\sum_k=1^\\min(i,3j+1)[k\\equiv 1\\pmod3]dp_i-k,j-\\frack-13-3[k\\equiv 0\\pmod3]dp_i-k,j-\\frack3 dpi,j=dpi1,k1+k=1min(i,3j+1)[k1(mod3)]dpik,j3k13[k0(mod3)]dpik,j3k其中 d p i − 1 , k − 1 dp_i-1,k-1 dpi1,k1表示这个位置没被选择容斥, 3 3 3的系数是由于模 3 3 3 0 0 0的情况有 A B C , B C A , C A B ABC,BCA,CAB ABC,BCA,CAB三种结构,模 3 3 3 1 1 1的情况结构是固定的,没必要乘 3 3 3
答案显然可以通过 d p dp dp值算出来,有
A n s = ∑ ( n − 3 i A − i , B − i , C − i ) d p n , n − i Ans=\\sum\\binomn-3iA-i,B-i,C-idp_n,n-i Ans=(Ai,Bi,Cin3i)dpn,ni
再对上面的式子根据模 3 3 3余数加个前缀和优化,我们就得到一个简单的 O ( n 2 ) O\\left(n^2\\right) O(n2) d p dp dp做法了。

接下来让我们来看看怎么优化上面的这个 d p dp dp,不妨考虑生成函数。
定义二元生成函数 G ( x , y ) G(x,y) G(x,y),其中 [ x i y j ] G [x^iy^j]G [xiyj]G代表 d p i , j dp_i,j dpi,j的值。
通过 G G G的递推式可以得到,
F = x + ∑ i = 1 ∞ x 3 i + 1 y i − 3 x 3 i y i = x − 3 x 3 y 1 − x 3 y G = ∑ i = 0 ∞ F i = 1 1 − F ( x , y ) = 1 − x 3 y 1 − x + 2 x 3 y F=x+\\sum_i=1^\\inftyx^3i+1y^i-3x^3iy^i=\\fracx-3x^3y1-x^3y\\\\ G=\\sum_i=0^\\infty F^i=\\frac11-F(x,y)=\\frac1-x^3y1-x+2x^3y\\\\ F=x+i=1x3i+1yi3x3iyi=1x3yx3x3yG=i=0Fi=1F(x,y)1=1x+2x3y1x3y同样,考虑现在答案怎么计算。
A n s = ∑ i = 0 min ⁡ ( A , B , C ) ( n − 3 i A − i , B − i , C − i ) [ x n y i ] G Ans=\\sum_i=0^\\min(A,B,C)\\binomn-3iA-i,B-i,C-i[x^ny^i]G Ans=i=0min(A,B,C)(Ai,Bi,Cin3i)[xnyi]G G ′ = 1 1 − x + 2 x 3 y = ∑ ( x − 2 x 3 y ) i G'=\\frac11-x+2x^3y=\\sum (x-2x^3y)^i G=以上是关于[AGC058D]Yet Another ABC String的主要内容,如果未能解决你的问题,请参考以下文章

[AGC058D]Yet Another ABC String

D. Yet Another Yet Another Task (ST表模版 + 单调队列)

CF-1359 D. Yet Another Yet Another Task ST表+单调队列

CF-1359 D. Yet Another Yet Another Task ST表+单调队列

Educational Codeforces Round 88 (Rated for Div. 2) D. Yet Another Yet Another Task

Educational Codeforces Round 88 (Rated for Div. 2) D. Yet Another Yet Another Task