题目传送门

Desctiption

见题面。

Solution

人类智慧。。。

考虑这样一个赌博游戏,现在有一个猴子,它随机从 \(1\sim n\) 中选一个打出来。现在有若干个赌徒,他们一开始都有 \(\$1\),现在有一个字符串 \(S\),赌徒在第一次押猴子会打 \(S_1\),如果赢了就回收 \(\$ n\) ,如果输了就可以滚他的蛋了。如果赌徒赢了就继续押猴子会打 \(S_2\),如果赢了就回收 \(\$ n^2\) ,否则就可以滚蛋了。以此类推,并且猴子每打一个字都会新加进来一个赌徒。当某一个赌徒不用滚蛋的时候赌场就可以滚蛋了。

我们观察后可以发现这个赌博是一个公平博弈,因为一个赌徒最后的期望财产为 \(1\),所以赌徒和赌场从期望上来讲都是不赚不亏的。接着我们考虑结束前发生了什么。

我们假设 \(S=\{1,4,1,5,1,1,4,1\}\),\(n=5\),那么最后一个赌徒得了 \(\$5\),倒数第三个赌徒得了 \(\$5^3\) ,倒数第八个赌徒得了 \(\$5^8\),其余赌徒都滚蛋了。

又因为这个博弈是公平的,也就是说从期望角度,赌场需要来 \(5^1+5^3+5^8\) 个人才可以。我们另外可以看出,赌徒得的总钱数(即这个题中唱歌期望时间)就是:

\[\sum_{T\in \text{Border S}} n^{|T|}
\]

求 \(\text{Border}\) 可以直接 KMP。

时间复杂度 \(\Theta(n)\)。

Code

#include <bits/stdc++.h>
using namespace std; #define Int register int
#define MAXN 100005
#define mod 10000 template <typename T> inline void read (T &t){t = 0;char c = getchar();int f = 1;while (c < '0' || c > '9'){if (c == '-') f = -f;c = getchar();}while (c >= '0' && c <= '9'){t = (t << 3) + (t << 1) + c - '0';c = getchar();} t *= f;}
template <typename T,typename ... Args> inline void read (T &t,Args&... args){read (t);read (args...);}
template <typename T> inline void write (T x){if (x < 0){x = -x;putchar ('-');}if (x > 9) write (x / 10);putchar (x % 10 + '0');} int n,m,t,s[MAXN],f[MAXN],fail[MAXN]; int mul (int a,int b){return a * b % mod;}
int add (int a,int b){return a + b >= mod ? a + b - mod : a + b;}
int qkpow (int a,int b){
int res = 1;for (;b;b >>= 1,a = mul (a,a)) if (b & 1) res = mul (res,a);
return res;
} void Work (int now){
read (m);
for (Int i = 1;i <= m;++ i) read (s[i]);
for (Int i = 2,t = 0;i <= m;++ i){
while (t && s[t + 1] != s[i]) t = fail[t];
if (s[t + 1] == s[i]) ++ t;
fail[i] = t;
}
for (Int i = m;i;i = fail[i]) f[i] = now;
int ans = 0;for (Int i = 1,tmp = n % mod;i <= m;++ i,tmp = mul (tmp,n)) if (f[i] == now) ans = add (ans,tmp);
printf ("%04d\n",ans);
} signed main(){
read (n,t);
while (t --> 0) Work (t + 1);
return 0;
}

题解 [CTSC2006]歌唱王国的更多相关文章

  1. [CTSC2006]歌唱王国

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

  2. bzoi1152 [CTSC2006]歌唱王国Singleland

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

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

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

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

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

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

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

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

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

  7. luogu P4548 [CTSC2006]歌唱王国

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

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

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

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

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

随机推荐

  1. 第一章 Net 5.0 快速开发框架 YC.Boilerplate--框架介绍

    YC.Boilerplate 框架介绍 YC.Boilerplate 是一套快速开发框架,采用当下流行的前后端分离开发模式,前端 采用VUE.后端采用Net 5.0:框架实现了 多租户.动态webAp ...

  2. windows下mysql5.7.17配置

    1.官网下载mysql5.7.17 64位 https://dev.mysql.com/downloads/mysql/ 2.安装完解压到E盘主目录下,改文件名为mysql 3.配置环境变量 我的电脑 ...

  3. Mysql 5.6 编译报错

    编译安装 mysql(下面是编译参数) /usr/local/bin/cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.36 \ -DMYSQ ...

  4. Selenium4 IDE初体验

    今天闲来无事,尝试了一番Selenium4的IDE,提供了录制和回放的功能.下面是对它的简单介绍. 安装 下载地址:https://www.selenium.dev/selenium-ide/ 在下载 ...

  5. 专项测试-App性能分析

    专项测试 app性能 Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastRece ...

  6. 常见shell脚本测试题 if/case语句

    1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提 ...

  7. go语言游戏服务端开发(一)——架构

    五邑隐侠,本名关健昌,12年游戏生涯. 本教程以Go语言为例.   网络游戏程序分为客户端和服务端.客户端负责图形渲染.交互和一些简单校验处理,服务端负责业务逻辑处理.数据存储. 我们开发一个游戏de ...

  8. Selenium系列5-XPath路径表达式

    Xpath介绍 XPath 使用路径表达式在 XML 文档中进行导航 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集.这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似. ...

  9. 使用git克隆仓库到本地报错:SSL certificate problem: unable to get local issuer certificate

    第一次使用Git工具克隆仓库,使用的是HTTPS链接,失败了.发现是因为通过HTTPS访问时,如果服务器上的SSL证书未经过第三方机构认证,Git就会报错. 解决方法:通过命令关闭验证 git con ...

  10. 回忆之placeholder

    直接看效果点这里 HTML <!DOCTYPE html> <html> <head lang="zh-CN"> <meta charse ...