1. 程式人生 > 其它 >LGP3281口胡

LGP3281口胡

當你看到一個東西的時候,GF 有可能比 DP 更方便。處理貢獻也有可能比 DP 更方便。

這個題意明顯是讓我們計算 \(S(r)-S(l-1)\) 之類的東西(

所以直接考慮字首的答案就好了(

考慮將一個數分為兩個部分,頂著最高位的字首和沒頂著最高位的字尾。

我們列舉這個字首。字尾的個數是很容易計算的,字首對答案的貢獻也很容易計算。

字尾對答案的貢獻不是那麼好計算。我們直接列 GF。

設所有長度為 \(n\) 的數的字首和之和為 \(g[n]\),所有長度為 \(n\) 的數的價值為 \(f[n]\)

對於 \(g\),似乎很好算,有 \(g[n]=\frac{B(B+1)}{2}\times\sum_{i=1}^{n}(\sum_{j=0}^{n-i}B^{j})\times B^{n-1}=\frac{B^{n}(B-1)}{2}\times\sum_{i=1}^{n}(\sum_{j=0}^{n-i}B^{j})\)

似乎 \(f\)\(g\) 差不了多少,是 \(f[n]=\frac{B(B+1)}{2}\times\sum_{i=1}^{n}(i+1)\times(\sum_{j=0}^{n-i}B^{j})\times B^{n-1}=\frac{B^{n}(B-1)}{2}\times\sum_{i=1}^{n}(i+1)\times(\sum_{j=0}^{n-i}B^{j})\)

但是有的數被列舉時包含了前導 \(0\)

我們直接去掉包含前導 \(0\) 的原有的數的貢獻,然後加上應有的貢獻就行了。

注意需要再列舉一位非 \(0\)