jzoj8132 扔骰子

dengchengyu發表於2024-08-11

jzoj8132 扔骰子

題面

傳送門

\(n\) 個骰子,第 \(i\) 個有 \(a_i\) 個面,數值為\(1\)\(a_i\),求扔出點數最大值的期望。


先將 \(a_i\) 排序。

則對於 \(Max=[a_{i-1}+1,a_i]\),有 \(n-i+1\) 個位置對 \(Max\) 有影響。

此時,最大值為 \(Max\) 的機率為:後 \(n-i+1\) 個都小於等於 \(Max\) 的機率,減去後 \(n-i+1\) 個都小於 \(Max\) 的機率,於是答案為:

\[\sum_{i=1}^n \frac{1}{\prod_{k=i}^{n}a_k}\sum_{j=a_{i-1}+1}^{a_i} j(j^{n-i+1}-(j-1)^{n-i+1}) \]

後面和式除了頭尾的相鄰兩項可以消掉,於是得到:

\[\sum_{i=1}^n \frac{1}{\prod_{k=i}^{n}a_k}(a_i^{n-i+2}-(a_{i-1}+1)\times a_{i-1}^{n-i+1}-\sum_{j=a_{i-1}+1}^{a_i}j^{n-i+1}) \]

後面 \(\sum_{i=1}^ni^k\) 就是 CF622F

具體來說,經過證明可知 \(\sum _{i=1} ^n i^k\) 是一個 \(k+1\) 次多項式 \(f(n)\)

\(n+1\) 個點確定一個 \(n\) 次多項式,我們用拉格朗日插值代入 \(n=[1,k+2]\)\(k+2\)\((x=n,y=f(n))\) 的值。

給出 \(n\) 次多項式的拉格朗日插值的公式:

\[f(x)=\sum _{i=1}^{n+1}y_i\prod_{j\ne i} \frac{x-x_j}{x_i-x_j} \]

直接做每次 \(O(k^2)\),考慮最佳化後面的分子和分母。

帶入 \(k+2\) 個值可以發現,分母是 1乘到i-1 再乘 -1乘到i-k-2,可預處理,而分子也可以用一個字首字尾的乘積表示。

於是複雜度為求 \(k+2\)\(y\)\(O(k\log k)\)

在這道題中,我們可以 \(O(n^2)\) 預處理 \(y\),拉格朗日插值變為 \(O(n)\)

總時間複雜度為 \(O(n^2)\)

相關文章