题目链接
做法
其实我们要求的就是每个点在点分树上子树大小的和的期望。
很自然的会想到去计算每个点的贡献,而这道题最巧妙的地方在于,它计算的是点对的贡献。
考虑点$j$什么时候会出现在点$i$的点分树中。可以发现当点$i$是$i$到$j$这条链上第一个被选的点时,$j$会出现在$i$的点分树子树中,而这个概率显然是$\frac{1}{dis(i,j)}$。这里我们记$dis(i,j)$表示$i$到$j$这条链上的点数。
那么我们只要求出长度为$1..n$的链分别有多少条就行了。
可以用点分治$+FFT$解决。发现题目非常的良心,$n\le 30000$,也就是说每种长度的链不会很大,一定$<998244353$,所以我们就假设模数为$998244353$,就可以用$NTT$代替$FFT$了。
代码
1 |
|