Luogu4548 歌唱王國

2022-05-07 22:27:13 字數 1082 閱讀 6072

題面:luogu

很有趣的一道題目。

考慮一類生成函式,對於乙個離散的整型隨機變數\(t\),該函式的每一項\(x^i\)的係數表示該變數取值為\(i\)的概率,也就是:

\[f(x)=\sum_^ p(t=i)x^i

\]這個函式有一些有趣的性質,例如:\(f(1)=1\)

以及對於\(t\)的期望有:\(e(t)=f'(1)\)

現在對於這道題目,令\(n\)表示字符集大小,\(m\)表示名字長度。

考慮設\(f(x)\)表示對於在唱第\(i\)個數字結束的概率的生成函式,\(g(x)\)表示對於在唱第\(i\)個數字未結束的概率的生成函式。

顯然有下面這個式子:

\[xg(x)+1=f(x)+g(x)

\]即在未結束的串後再接上乙個字元,有可能結束,也可能不結束。

其次,有:

\[g(x) \big(\fracx\big)^m=\sum_^a_f(x)\big(\fracx\big)^

\]即在未結束的串後接上名字一定會結束,但在這之前可能會提前結束,其中\(a_=0/1\),表示\(s[1,i]\)是否為串\(s\)的\(border\)。

對第乙個式子求導並化簡,有:

\[f'(x)=(x-1)g'(x)+g(x)

\]在第二個式子中帶入\(x=1\),有:

\[g(1)=\sum_^ a_ n^

\]所以:

\[e(x)=f'(1)=g(1)=\sum_^m a_ n^

\]對於\(a_\),\(kmp\)求即可。

#include#define n 100005

using namespace std;

inline int in()

const int p=10000;

int n,t,m,s[n],nex[n],pw[n];

int main()

int sum=0;

for(int i=m;i;i=nex[i]) sum=(sum+pw[i])%p;

printf("%.4d\n",sum);

} return 0;

}

LG P4548 CTSC2006 歌唱王國

在歌唱王國,所有人的名字都是乙個非空的僅包含整數 1 sim n 的字串。王國裡生活著一大群咕嚕兵,他們靠不停地歌唱首領 牛人酋長們的名字來獲取力量。咕嚕兵每一次歌唱過程是這樣的 首先,他從整數生成器那兒獲得乙個數字,然後花乙個時間單位將此數字唱出來,如果他發現某個牛人酋長的名字已經被歌唱出來 即此...

CTSC2006 歌唱王國

是 sdoi2017 硬幣遊戲的弱化版 但是也不完全一樣 按照硬幣遊戲的題,f x sum a i x i 來刻畫第i位結尾的概率生成函式 然後 g x 表示以i結尾,前面的隨便選。p x 表示字首字尾的匹配 f g f g p 然後g變成形式冪級數,分母乘過去,求導。但是,這個題是 期望 而不是 ...

CTSC2006 歌唱王國

補了一下概率生成函式。寫的公式可能不規範請不要介意。給出某個字串 s 你手中有個字串 t 一開始為空。每次隨機往 t 後加乙個字元,問 s 成為 t 的子串的期望次數。字符集大小為 c 正解是一條式子。可以做到 o n 介紹下概率生成函式 f x sum i p i x i p i 表示某個要求的變...