【BZOJ1152】歌唱王国(生成函数,KMP)
【BZOJ1152】歌唱王国(生成函数,KMP)
题面
题解
根据\(YMD\)论文来的QwQ。
首先大家都知道普通型生成函数是\(\displaystyle \sum_{i=0}^{\infty}a_ix^i\),类似的定义概率生成函数\(\displaystyle F(x)=\sum_{i=0}^\infty P(X=i)x^i\)。其中\(P(X=i)\)表示\(X\)这个随机变量为\(i\)的概率。
那么我们可以知道几个结论:\(\displaystyle F(1)=\sum_{i=0}^\infty P(X=i)=1\),这个结论很显然。
如果我们要求解期望,显然期望等于\(\displaystyle \sum_{i=0}^{\infty}iP(X=i)\)。
我们发现\(\displaystyle F'(x)=\sum_{i=1}^\infty iP(X=i)x^{i-1}\),那么我们要求解的期望就是\(F'(1)\)。
回到题目。
我们设\(f_i\)表示终止长度为\(i\)的概率,\(F(x)\)为其概率生成函数,那么要求解的就是\(F'(1)\)。
设\(g_i\)表示当前长度为\(i\)且还未结束的概率,\(G(x)\)为其普通型生成函数,那么我们可以得到:
\]
这个式子什么意思呢?首先右侧的\(1+G(x)x\)表示在当前序列后面随机加上一个字符,要加一的愿意是\(g_0=1\)。那么随机加完一个字符后,结束的概率是变成了\(F(x)\),未结束的概率是\(G(x)\),所以得到了这个等式。
设\(a_i\)表示\(A[1..i]\)是否是串\(A\)的\(border\),那么我们可以得到:
\]
等式左侧的含义是在当前未结束的串的后面直接接上目标串,那么这样一定会结束。
右侧的含义是因为前面的随机串中可能已经匹配了一部分的长度,导致在匹配了一半此时就已经结束了。
那么我们插入了一半就结束了,并且此时我们插入的一定是一段前缀,因此只有可能当这个位置是\(border\)时才可能结束。
那么强制在这个\(border\)时会结束,等价于我们钦定了随机串的最后\(L-i\)位。那么就得到了右边的式子。
我们要求解的东西是\(F'(1)\),
首先第一个式子可以写成:
\]
化简得到\(F'(1)=G(1)\)
然后令\(x=1\)带入到第二个式子中,可以得到:
\]
那么只需要\(KMP\)求解\(border\)就行了。
#include<iostream>
#include<cstdio>
using namespace std;
#define MOD 10000
#define MAX 100100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,T,pw[MAX],s[MAX],nt[MAX];
int main()
{
n=read();T=read();
pw[0]=1;for(int i=1;i<MAX;++i)pw[i]=1ll*pw[i-1]*n%MOD;
while(T--)
{
int m=read(),ans=0;
for(int i=1;i<=m;++i)s[i]=read();
for(int i=2;i<=m;++i)
{
int t=nt[i-1];
while(t&&s[t+1]!=s[i])t=nt[t];
if(s[t+1]==s[i])++t;
nt[i]=t;
}
for(int i=m;i;i=nt[i])ans=(ans+pw[i])%MOD;
printf("%04d\n",ans);
}
return 0;
}
【BZOJ1152】歌唱王国(生成函数,KMP)的更多相关文章
- 【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差
[题解]歌唱王国(概率生成函数+KMP)+伦讲的求方差 生成函数的本质是什么呀!为什么和It-st一样神 设\(f_i\)表示填了\(i\)个时候停下来的概率,\(g_i\)是填了\(i\)个的时候不 ...
- [CTSC2006]歌唱王国
[CTSC2006]歌唱王国 Tags:题解 题意 链接:在空串后不断随机添加字符,直到出现串\(S_i\)为止.求最终串的期望长度.\(\sum |S_i|\le 5*10^6\) 题解 以下内容来 ...
- bzoi1152 [CTSC2006]歌唱王国Singleland
[CTSC2006]歌唱王国Singleland Time Limit: 30 Sec Memory Limit: 162 MB Description 在歌唱王国,所有人的名字都是一个非空的仅包含整 ...
- P4548-[CTSC2006]歌唱王国【概率生成函数,KMP】
正题 题目链接:https://www.luogu.com.cn/problem/P4548 题目大意 \(t\)次询问,给出一个长度为\(m\)的串\(S\)和一个空串\(T\),每次在\(T\)后 ...
- 洛谷P4548 [CTSC2006]歌唱王国(概率生成函数)
题面 传送门 给定一个长度为\(L\)的序列\(A\).然后每次掷一个标有\(1\)到\(m\)的公平骰子并将其上的数字加入到初始为空的序列\(B\)的末尾,如果序列B中已经出现了给定序列\(A\), ...
- Luogu4548 CTSC2006 歌唱王国 概率生成函数、哈希
传送门 orz ymd 考虑构造生成函数:设\(F(x) = \sum\limits_{i=0}^\infty f_ix^i\),其中\(f_i\)表示答案为\(i\)的概率:又设\(G(x) = \ ...
- 洛谷 P4548 - [CTSC2006]歌唱王国(概率生成函数)
洛谷题面传送门 PGF 入门好题. 首先介绍一下 PGF 的基本概念.对于随机变量 \(X\),满足 \(X\) 的取值总是非负整数,我们即 \(P(v)\) 表示 \(X=v\) 的概率,那么我们定 ...
- luogu P4548 [CTSC2006]歌唱王国
传送门 这题\(\mathrm{YMD}\)去年就讲了,然而我今年才做(捂脸) 考虑生成函数,设\(f_i\)表示最终串长为\(i\)的概率,其概率生成函数为\(F(x)=\sum f_ix^i\), ...
- BZOJ 1152 歌唱王国
题目传送门 分析: 这道题很神仙,我们给出低配版解法和高配版解法2333 低配版: 首先知道这样一个公式...(证明去高配版) 当一个字符串S其中S [ 1 , i ] = S [ n - i + 1 ...
随机推荐
- stark组件之展示数据(查)
1.编辑按钮构建完成 2.构造表头,删除,checkbox,links编辑 3.代码+总结 1.编辑按钮构建完成 1.必备知识预习 第一个会打印5. 第二个输出alex alex是person ...
- 【学习总结】C-翁恺老师-入门-第3周<循环>
[学习总结]C-翁恺老师-入门-总 1-求一个整数的位数:引入循环while 注:循环体内要有改变循环的机会,要不然就死循环了啊! 注:手写推测程序是否正确. 注:测试程序-边界:个位数.10.0.负 ...
- 简述HTTP协议
引言 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议.HTTP 是基于 TCP/IP 协议通信协议 ...
- 小程序wepy.js框架总结
wepy.js借鉴了Vue的语法风格和功能特性,对官方提供的框架进行了封装,更贴近于MVVM架构模式,让开发者更加容易上手,增加开发效率.(脏数据处理--是否有标识.是否有响应) 前端开发的对组件化开 ...
- Linux 下面 PG 的 uuid-ossp 包安装办法
1. pgsql 安装 时报错, 如图示: 详细信息为: 执行SQL为: CREATE EXTENSION IF NOT EXISTS "uuid-ossp" 错误纤细信息为: C ...
- Day 6-1计算机网络基础&TCP/IP
按照功能不同,人们将互联网协议分为osi七层或tcp/ip五层或tcp/ip四层(我们只需要掌握tcp/ip五层协议即可) 每层运行常见物理设备: TCP/IP协议: Transmission Con ...
- CDH 6.0.1 集群搭建 「Before install」
从这一篇文章开始会有三篇文章依次介绍集群搭建 「Before install」 「Process」 「After install」 继上一篇使用 docker 部署单机 CDH 的文章,当我们使用 d ...
- 老男孩python学习自修第十天【三元表达式与lambda表达式】
例如: 1.使用三元表达式给变量赋值 result = '空' if x == None else x 2.使用lambda定义函数 add = lambda x, y: x+y
- TensorFlow总结
第一 基础 1. 定义变量 #定义维度为[2,3], 平均值为·1, 标准差为1,类型为float32,名称为w1的服从正态分布的变量 w1 = tf.Variable(tf.random_norma ...
- echo显示颜色
如有转载,不胜荣幸.http://www.cnblogs.com/aaron-agu/ [;;34m hello aaron \[0m”