传送门

这题\(\mathrm{YMD}\)去年就讲了,然而我今年才做(捂脸)

考虑生成函数,设\(f_i\)表示最终串长为\(i\)的概率,其概率生成函数为\(F(x)=\sum f_ix^i\),设\(g_i\)表示做到长度为\(i\)没结束的概率,其概率生成函数为\(G(x)=\sum g_ix^i\),那我们要求的就是\(F'(1)\)

考虑他们之间的关系,首先如果在一个没有结束的串后接一个字符,那么这个串可能结束也可能没结束,可以得到\(F(x)+G(x)=xG(x)+1\),两边对\(x\)求导并代入\(x=1\)得到\(F'(1)=G(1)\)

然后继续考虑如果在一个没有结束的串直接加入给定的串,那么一定会结束,只不过有可能在没加完的时候就结束了,假设加入了\(i\)个字符结束,那么说明原串有一个长度为\(i\)的\(border\),设\(a_i\)表示原串是否有长度为\(i\)的\(border\),那么可以得到\(G(x)(\frac{x}{n})^m=\sum_{i=1}^{m}a_iF(x)(\frac{x}{n})^{m-i}\),化简并代入\(x=1\)得到\(F'(1)=G(1)=\sum_{i=1}^{m}a_in^i\),然后kmp即可

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#include<set>
#define LL long long
#define db double using namespace std;
const int N=1e5+10,mod=10000;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,m,a[N],nxt[N],p[N],ans; int main()
{
n=rd();
p[0]=1;
for(int i=1;i<=N-10;++i) p[i]=1ll*p[i-1]*n%mod;
int T=rd();
while(T--)
{
m=rd();
for(int i=1;i<=m;++i) a[i]=rd();
nxt[1]=nxt[2]=1;
for(int i=2,j=1;i<=m;++i)
{
while(j>1&&a[i]!=a[j]) j=nxt[j];
nxt[i+1]=a[i]==a[j]?++j:1;
}
ans=0;
int x=m+1;
while(x>1) ans=(ans+p[x-1])%mod,x=nxt[x];
if(ans<1000) putchar('0');
if(ans<100) putchar('0');
if(ans<10) putchar('0');
printf("%d\n",ans);
}
return 0;
}

实测这题算答案不取模90'(我也不知道为什么)

luogu P4548 [CTSC2006]歌唱王国的更多相关文章

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

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

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

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

  3. [CTSC2006]歌唱王国

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

  4. bzoi1152 [CTSC2006]歌唱王国Singleland

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

  5. 【BZOJ】1152: [CTSC2006]歌唱王国Singleland

    题解 读错题了,是最后留下一个牛人首长歌颂他,和其他人没有关系,t就相当于数据组数 结论题,具体可看 https://www.zhihu.com/question/59895916/answer/19 ...

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

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

  7. 题解 [CTSC2006]歌唱王国

    题目传送门 Desctiption 见题面. Solution 人类智慧... 考虑这样一个赌博游戏,现在有一个猴子,它随机从 \(1\sim n\) 中选一个打出来.现在有若干个赌徒,他们一开始都有 ...

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

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

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

    [题解]歌唱王国(概率生成函数+KMP)+伦讲的求方差 生成函数的本质是什么呀!为什么和It-st一样神 设\(f_i\)表示填了\(i\)个时候停下来的概率,\(g_i\)是填了\(i\)个的时候不 ...

随机推荐

  1. Android_(游戏)打飞机03:控制玩家飞机

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  2. 关于Java 8 forEach

    1. forEach and Map 1.1 通常这样遍历一个Map Map<String, Integer> items = new HashMap<>(); items.p ...

  3. SpringBoot导入导出Excel到Mysql

    2018.11.11 10:44:52字数 96阅读 1320 一.包的引用 除了引用SpringBoot基本包之外,还需要引入对Excel操作的包,如下: <dependency> &l ...

  4. auth 认证组件的补充

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...

  5. gulp自动化构建工具安装使用(1)

    我用的是windows,所以以下操作针对于windows用户,其他系统有不一样的地方请自行查阅资料更正. 好了,废话少说,反正也就是随手捣腾.下雨了,天晴了,我们开始搞gulp了 安装:gulp是个构 ...

  6. (转)mysql基础命令

    Sql代码 asc 按升序排列 desc 按降序排列 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE ...

  7. 【转】diamond专题(一)– 简介和快速使用

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  8. gherkin

    语法 The primary keywords are: Feature Rule (as of Gherkin 6) Scenario (or Example) Given, When, Then, ...

  9. SpringMvc的学习之路

    今天首先SpringMvc 写了个简单的配置 1.首先搭好环境配置web.xml <!-- 配置 DispatcherServlet --> <servlet> <ser ...

  10. leetcode172 阶乘后的零

    对数算法:O(nlogn) /** 即为统计0-n中5,10,15,20,25的个数,因为肯定有足够的偶数使得存在x*5=10*n,25=5*5因此计数加2,5=1*5计数加一: 但如果挨个计数当n很 ...