[UNR #3]百鸽笼
Posted StaroForgin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[UNR #3]百鸽笼相关的知识,希望对你有一定的参考价值。
百鸽笼
题解
首先,我们依然可以像上道题一样进行类似的转化。 以上是关于[UNR #3]百鸽笼的主要内容,如果未能解决你的问题,请参考以下文章
每次操作时会随机一个使它减小
1
1
1,我们的目的是当所有数都减到
⩽
0
\\leqslant 0
⩽0,统计每个数时最后一个见得概率。
我们不妨去尝试枚举
a
i
a_i
ai作为一个最后减到
0
0
0的数,那么相当于要求在之前的减小序列中,这个数会出现
a
i
−
1
a_i-1
ai−1次,其它数会出现大于等于
a
j
a_j
aj次。
可以尝试通过
E
G
F
EGF
EGF进行表示,其中我们定义
F
i
(
x
)
F_i(x)
Fi(x)表示固定点
i
i
i作为末尾端点时的生成函数,显然有:
F
i
(
x
)
=
x
a
i
−
1
(
a
i
−
1
)
!
∏
j
≠
i
(
∑
k
=
a
j
∞
x
k
k
!
)
=
x
a
i
−
1
(
a
i
−
1
)
!
∏
j
≠
i
(
e
x
−
∑
k
=
0
a
j
−
1
x
k
k
!
)
F_i(x)=\\fracx^a_i-1(a_i-1)!\\prod_j\\ne i(\\sum_k=a_j^\\infty\\fracx^kk!)=\\fracx^a_i-1(a_i-1)!\\prod_j\\ne i(e_x-\\sum_k=0^a_j-1\\fracx^kk!)
Fi(x)=(ai−1)!xai−1j=i∏(k=aj∑∞k!xk)=(ai−1)!xai−1j=i∏(ex−k=0∑aj−1k!xk)我们记
A
n
s
i
Ans_i
Ansi表示
a
i
a_i
ai的答案,显然这个答案是可以通过
F
i
(
x
)
F_i(x)
Fi(x)算出来的。
A
n
s
i
=
∑
j
=
0
∞
j
!
[
x
j
]
F
i
(
x
)
n
j
+
1
Ans_i=\\sum_j=0^\\infty\\fracj![x^j]F_i(x)n^j+1
Ansi=j=0∑∞nj+1j![xj]Fi(x)由于
F
i
(
x
)
F_i(x)
Fi(x)中的
e
x
e^x
ex展开后次数是会达到无限大的,可能不太好算,我们不妨先记
y
=
e
x
y=e^x
y=ex,将它先看成一个二元生成函数,这样就可以比较容易的算出每个
[
x
j
y
k
]
[x^jy^k]
[xjyk]的系数,再与
x
j
y
k
x^jy^k
xjyk中每个
x
x
x次项的系数乘起来。
显然,有
A
n
s
i
=
∑
j
=
0
∞
f
(
j
,
k
)
[
x
j
y
k
]
F
i
(
x
)
f
(
i
,
j
)
=
1
n
i
+
1
∑
k
=
0
∞
j
k
(
i
+
k
)
!
n
k
k
!
=
1
n
i
+
1
∑
k
=
0
∞
(
j
n
)
k
(
i
+
k
)
i
‾
Ans_i=\\sum_j=0^\\inftyf(j,k)[x^jy^k]F_i(x)\\\\ f(i,j)=\\frac1n^i+1\\sum _k=0^\\infty\\fracj^k(i+k)!n^kk!=\\frac1n^i+1\\sum_k=0^\\infty(\\fracjn)^k(i+k)^\\underlinei
Ansi=j=0∑∞f(j,k)[xjyk]Fi(x)f(i,j)=ni+11k=0∑∞nkk!jk(i+k)!=ni+11k=0∑∞(nj)k(i+k)i如果我们将
j
n
\\fracjn
nj看作一个变元,那么我们后面这个式子相当于一个对一个多项式求
i
i
i次导。
可以得到
f
(
i
,
j
)
=
1
n
i
+
1
(
∑
k
=
0