[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
3i−j,并且,进行
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=dpi−1,k−1+k=1∑min(i,3j+1)[k≡1(mod3)]dpi−k,j−3k−1−3[k≡0(mod3)]dpi−k,j−3k其中
d
p
i
−
1
,
k
−
1
dp_i-1,k-1
dpi−1,k−1表示这个位置没被选择容斥,
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=∑(A−i,B−i,C−in−3i)dpn,n−i。
再对上面的式子根据模
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=1∑∞x3i+1yi−3x3iyi=1−x3yx−3x3yG=i=0∑∞Fi=1−F(x,y)1=1−x+2x3y1−x3y同样,考虑现在答案怎么计算。
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=0∑min(A,B,C)(A−i,B−i,C−in−3i)[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