[UNR #3]百鸽笼

Posted StaroForgin

tags:

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

百鸽笼

题解

首先,我们依然可以像上道题一样进行类似的转化。
每次操作时会随机一个使它减小 1 1 1,我们的目的是当所有数都减到 ⩽ 0 \\leqslant 0 0,统计每个数时最后一个见得概率。
我们不妨去尝试枚举 a i a_i ai作为一个最后减到 0 0 0的数,那么相当于要求在之前的减小序列中,这个数会出现 a i − 1 a_i-1 ai1次,其它数会出现大于等于 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)=(ai1)!xai1j=i(k=ajk!xk)=(ai1)!xai1j=i(exk=0aj1k!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=0nj+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=0f(j,k)[xjyk]Fi(x)f(i,j)=ni+11k=0nkk!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

以上是关于[UNR #3]百鸽笼的主要内容,如果未能解决你的问题,请参考以下文章

UOJ #390. UNR #3百鸽笼

[UNR #3]百鸽笼

UOJ390UNR #3百鸽笼容斥,EGF

HDU 1205 吃糖果(鸽笼原理)

Gym100851G Generators 思维 (鸽笼原理)

[51NOD1103] N的倍数(鸽笼原理)