CTSC2006 歌唱王國 生成函式

2022-05-07 08:18:07 字數 1142 閱讀 8635

bzoj1152

需要先來一手概率生成函式。

定義概率生成函式$f(x)=\sum_^p(y==i)x^i$,其中$p(y==i)$表示$y$這個變數取$i$的概率,容易發現$f(1) = 1$

對該概率生成函式求導:$f'(x)=\sum_^p(y==i)i*x^$,那麼可以發現$f'(1)$即是$y$的期望

接下來開始解決這道題。

設$f_i$表示終止長度為$i$的概率,$f(x)$為其生成函式。設$g_i$表示長度為$i$還未終止的概率,$g_0=1$,$g(x)$為其生成函式。

考慮$g_i$向$f_$與$g_$轉移,即在長度為$i$的未終止的串後加乙個字元:$g_i=f_+g_$,也即:$$f(x)+g(x)=x*g(x)+1$$

因為$f'(1)$為所求,因此兩邊求導:$$f'(x)+g'(x)=x*g'(x)+g(x)$$

代入$x=1$:$$f'(1)=g(1)$$

現在只要求出$g(1)$即可

設目標串串長為$m$,字符集大小為$n$,$a_i=1/0$表示$[1,i]$是否為目標串的乙個$border$

考慮在任意乙個未終止串後加上乙個目標串都一定可以終止,但可能在加到中間某個字元時就可以終止了,所以列舉真正所需要的串的長度,有方程:$g_i(\frac)^m=\sum_^a_jf_(\frac)^$,即:$$g(x)(\frac)^m*x^m=f(x)\sum_^a_i(\frac)^*x^$$

代入$x=1$:$$g(1)=\sum_^m a_i*n^i$$

$kmp$求出$a$陣列即可

$o(n)$

#include#include

#include

#include

using

namespace

std;

const

int maxn = 100005, mod = 10000

;inline

intread()

int add(int x, int

y)int

n, m, t, a[maxn], fail[maxn], pw[maxn];

void

kmp()

}int

main()

return0;

}

view code

ctsc2010 星際旅行

題意很簡單 給定一棵樹,問從根分別走到每個節點的最長路程,其中每個點給定lim,即最多從該點出發lim次,保證lim大於等於該點的度數。特別 鳴謝 ldl在他的模擬題中出了這道題。當題解講這要用樹形dp解網路流模型時,都被驚異了,完全沒有想到網路流,也完全沒有必要網路流,atm在考場上直接有樹形dp...

CTSC2018 混合果汁

為何要用整體二分,整體二分應該怎樣二分,和 poi2011 met meteors十分相像,這裡就不再重複。那麼對於乙個顧客來講,如果當前的區間總份數小於他想要的份數,或者是區間最小 大於他能接受的最大 就把該顧客劃分到右區間,如若滿足則劃分到左區間。想要和 poi2011 met meteors一...

CTSC2010 效能優化

ctsc2010 效能優化 迴圈卷積快速冪 兩個注意點 n 1不是2 k p 1形式,任意模數又太慢?n 2 k1 3 k2 5 k3 7 k4 多路分治!深刻理解fft運算本質 分治,推式子得到從下往上的迭代公式 最後求的是w n i的點值 快速冪 迴圈卷積快速冪比較特殊,就是g f,n的項的係數...