【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差

生成函数的本质是什么呀!为什么和It-st一样神

设\(f_i\)表示填了\(i\)个时候停下来的概率,\(g_i\)是填了\(i\)个的时候不停下的来的概率,规定\(f_0=g_0=1\)

两个生成函数是

\[G(x)=\sum g(i)x^i
\\
F(x)=\sum f(i)x^i
\]

可以得到一些关系:

  • 在后面随意加上一个字符

    \[xG(x)+1=F(x)+G(x)
    \]

  • 直接强行接上原串:

    \[x^LG(x)(\dfrac 1 {\sigma})^L
    \]

    此时他一定会停止,但是停止的概率是多大呢?

    可以发现,假如这个字符串没有BORDER(不存在前缀可以等于等长的后缀),\(F(x)\)和\(G(x)\)是独立的,但是有BORDER的时候怎么办呢?

    由于\(f_i\)代表在填出来的字符串第\(i\)位时停下的概率,所以此时填出来的字符串尾巴的情况是确定的,由于存在BORDER,我们就不用直接强行接上\(L\)那么长的串,可能到一半就填出来了,不难发现就是

    \[x^LG(x)(\dfrac 1 {\sigma})^L=\sum [i\in B](\dfrac 1 {\sigma})^{L-i}x^{L-i}F(x)
    \]

有了这些关系怎么办呢?我们知道,\(E(X)=\sum i\times P(X=i)\)

所以对\(F(x)\)求导,指数都到系数里面来了,所以代入\(x=1\)就得到了\(E(X)\)。

答案就是\((F(1))'\)

我们之前有一些等量关系,所以

\[F(x)'+G(x)'=(xG(x)+1'=xG(x)'+G(x)
\]

所以

\[F(1)'=G(1)
\]

代入第二个式子

\[G(1)=\sum[i \in B]\sigma^iF(1)
\]

显然有概率的规范性\(F(1)=1\)

所以答案就是

\[G(1)=\sum[i \in B]\sigma^i
\]

用KMP求BORDER就是的

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; typedef long long ll;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return ret;
} const int maxn=2e5+5;
const int mod=10000;
int data[maxn],p[maxn],fac[maxn];
int n,m; inline int ksm(const int&base ,const int&p){
register int ret=1;
for(register int t=p,b=base%mod;t;t>>=1,b=b*b%mod)
if(t&1) ret=1ll*ret*b%mod;
return ret;
} inline void getborder(){
memset(p,0,sizeof p);
for(register int t=2,k;t<=n;++t){
k=p[t-1];
while(k&&data[k+1]!=data[t]) k=p[k];
if(data[k+1]==data[t])++k;
p[t]=k;
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
//freopen("out.out","w",stdout);
#endif
m=qr();
fac[0]=1;
for(register int t=1;t<=200000;++t) fac[t]=1ll*fac[t-1]*m%mod;
int T=qr();
while(T--){
n=qr();
for(register int t=1;t<=n;++t) data[t]=qr();
getborder();
int ans=0;
for(register int t=n;t;t=p[t])
ans=(ans+fac[t])%mod;
printf("%04d\n",ans);
}
return 0;
}

如何算方差,咕咕咕先。

【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差的更多相关文章

  1. Luogu4548 CTSC2006 歌唱王国 概率生成函数、哈希

    传送门 orz ymd 考虑构造生成函数:设\(F(x) = \sum\limits_{i=0}^\infty f_ix^i\),其中\(f_i\)表示答案为\(i\)的概率:又设\(G(x) = \ ...

  2. 【BZOJ1152】歌唱王国(生成函数,KMP)

    [BZOJ1152]歌唱王国(生成函数,KMP) 题面 BZOJ 洛谷 题解 根据\(YMD\)论文来的QwQ. 首先大家都知道普通型生成函数是\(\displaystyle \sum_{i=0}^{ ...

  3. P4548-[CTSC2006]歌唱王国【概率生成函数,KMP】

    正题 题目链接:https://www.luogu.com.cn/problem/P4548 题目大意 \(t\)次询问,给出一个长度为\(m\)的串\(S\)和一个空串\(T\),每次在\(T\)后 ...

  4. 洛谷P4548 [CTSC2006]歌唱王国(概率生成函数)

    题面 传送门 给定一个长度为\(L\)的序列\(A\).然后每次掷一个标有\(1\)到\(m\)的公平骰子并将其上的数字加入到初始为空的序列\(B\)的末尾,如果序列B中已经出现了给定序列\(A\), ...

  5. 洛谷 P4548 - [CTSC2006]歌唱王国(概率生成函数)

    洛谷题面传送门 PGF 入门好题. 首先介绍一下 PGF 的基本概念.对于随机变量 \(X\),满足 \(X\) 的取值总是非负整数,我们即 \(P(v)\) 表示 \(X=v\) 的概率,那么我们定 ...

  6. [CTSC2006]歌唱王国

    [CTSC2006]歌唱王国 Tags:题解 题意 链接:在空串后不断随机添加字符,直到出现串\(S_i\)为止.求最终串的期望长度.\(\sum |S_i|\le 5*10^6\) 题解 以下内容来 ...

  7. luogu P4548 [CTSC2006]歌唱王国

    传送门 这题\(\mathrm{YMD}\)去年就讲了,然而我今年才做(捂脸) 考虑生成函数,设\(f_i\)表示最终串长为\(i\)的概率,其概率生成函数为\(F(x)=\sum f_ix^i\), ...

  8. bzoi1152 [CTSC2006]歌唱王国Singleland

    [CTSC2006]歌唱王国Singleland Time Limit: 30 Sec Memory Limit: 162 MB Description 在歌唱王国,所有人的名字都是一个非空的仅包含整 ...

  9. 生成函数小结——[ EGF ][ ln 的一个套路 ][ 概率生成函数 ]

    看了jcvb的WC2015交流课件.虽然没懂后面的复合逆部分,但生成函数感觉受益良多. 指数生成函数 集合中大小为 i 的对象的权值是 \( a_i \) ,该集合的生成函数是 \( \sum\lim ...

随机推荐

  1. MySQL列出当前月的每一天

    因为工作的原因,要用MySQL列出当前月份每一天的日期,自己查了下网上资料都是列出最近一个月的日期的解决方案,自己根据查到的的方案,修改成了下面两个方案,在此记录下: 方案一: SELECT date ...

  2. Android 错误:IllegalStateException: Can not perform this action after onSaveInstanceState

    今天做Fragment切换.状态保存功能的时候,出现了这个错误: E/AndroidRuntime(12747): Caused by: java.lang.IllegalStateException ...

  3. 【BestCoder Round #93 1004】MG loves set

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=6022 [题意] 让你求一个集合的子集数目; 这个子集有要求; 即: 它所有元素的平方的和小于它所有 ...

  4. Java多线程遍历文件夹,广度遍历加多线程加深度遍历结合

    复习IO操作,突然想写一个小工具,统计一下电脑里面的Java代码量还有注释率,最开始随手写了一个递归算法,遍历文件夹,比较简单,而且代码层次清晰,相对易于理解,代码如下:(完整代码贴在最后面,前面是功 ...

  5. 2019-9-2-win10-uwp-车表盘-径向规

    title author date CreateTime categories win10 uwp 车表盘 径向规 lindexi 2019-09-02 12:57:38 +0800 2018-2-1 ...

  6. 一次操作系统报错OutOfMemory Error的处理记录

    在启动公司内嵌的tomcat容器时出现报错, 如下: # There is insufficient memory for the Java Runtime Environment to contin ...

  7. 脑残的设计--- 视图(view)里面包含order by

    2015/05/26 更新 今天又遇到了类似问题...尼玛无语了 编码规范啊 !!! 今天有个兄弟跟我说sql跑得太慢了,让我看看.sql如下: SELECT rownum row_num, pv.v ...

  8. Python--day40--主线程和子线程代码讲解

    1,最简单的线程例子: 2,多线程并发: import time from threading import Thread #多线程并发 def func(n): time.sleep(1) prin ...

  9. HDU 6621"K-th Closest Distance"(二分+主席树)

    传送门 •题意 有 $m$ 次询问,每次询问求 $n$ 个数中, $[L,R]$ 区间距 $p$ 第 $k$ 近的数与 $p$ 差值的绝对值: •题解 二分答案,假设当前二分的答案为 $x$,那么如何 ...

  10. 清除SVN未版控文件

    用Git时,git clean -df 可以清除所有没有add的文件,得到一个干净的工作空间. 用SVN没有这样的命令,当然可以 svn export 得到一个干净的工作空间,但会花很长时间,而且没有 ...