[CTSC2006]歌唱王国Singleland

Time Limit: 30 Sec Memory Limit: 162 MB

Description

在歌唱王国,所有人的名字都是一个非空的仅包含整数1~n的字符串。王国里生活着一大群咕噜兵,他们靠不停的

歌唱首领——牛人酋长们的名字来获取力量。咕噜兵每一次歌唱过程是这样的:首先,他从整数生成器那儿获得一

个数字,然后花一个时间单位将此数字唱出来,如果他发现某个牛人酋长的名字已经被歌唱出来(即此名字是歌唱

序列的一个连续子串),那么这次歌唱过程就立即结束。相关名词定义歌唱序列:如果某人歌唱了x个数字,第i次

歌唱的数字为ai,那么歌唱序列=(a1,a2,…,ax)。整数生成器:歌唱王国的神物,它有一个按钮,如果你按一下按

钮,将从1~n数字中等概率的随机返回一个整数。歌唱时间:在一次歌唱过程中花费的时间。歌唱时间是随机的,

无法预料;不过歌唱时间的期望值是固定的,此期望值即平均来说歌唱时间有多长,亦可称作平均歌唱时间。王国

里的人非常喜欢歌唱,他们希望歌唱的时间越长越好,所以他们决定罢免一些牛人酋长,使得平均歌唱时间变长。

但是他们不能罢免掉所有的牛人酋长,否则他们每次歌唱都无法停止,无法获取力量;于是他们决定只保留一个牛

人酋长而罢免其余的牛人酋长。你的任务是:对于给定的n、牛人酋长的个数t以及每一个牛人酋长的名字,告诉王

国里的人们,对于1≤i≤t,如果保留第i个牛人酋长,罢免掉其余的,那么平均歌唱时间将是多少。提示:此数为

一个非负整数!输出要求:由于这个数字太大,所以你只需输出这个数的末4位数字。如果不足4位,则前面补0(见

样例)。

Input

第一行,两个整数n、t;以下t行描述t个牛人酋长名字。

文件第i+1(1≤i≤t)行格式如下

第一个数为mi表示第i个牛人酋长的名字的长度,在一个空格之后,

接下来有mi个数,用来描述这个牛人酋长的名字,相邻两个整数之间用一个空格分开。

1≤n≤105,t≤50,1≤mi≤105

Output

共 t 行,第 i 行为一个整数,表示若保留第 i 个牛人酋长而罢免其余的,则平均歌唱时间最长的末四位数字是多少。

Sample Input

2 2

1 1

3 1 2 1

Sample Output

0002

0010

这大概是个结论。。。

就是说你求出这个东西的 fail 数组。。。

然后呢。。。你从最后一个开始跳 fail 链

每次把 (字符集大小)的fail【x】次方加入答案。。。

等我证一下

挑战失败。。。
看了个很不错的blogs。。。
https://www.zhihu.com/question/59895916/answer/196874145

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, mod = 10000;
int n, t, len, ans, s[N], fail[N], pw[N]; inline void KMP()
{
memset(fail, 0, sizeof(fail));
for(int i = 2; i <= len; ++i){
int lin = fail[i - 1];
while(lin && s[lin + 1] != s[i]) lin = fail[lin];
if(s[i] == s[lin + 1]) fail[i] = lin + 1;
}
} inline void prepare()
{
pw[0] = 1;
for(int i = 1; i < N; ++i) pw[i] = pw[i - 1] * n % mod;
} inline void print()
{
ans = 0; int p = len;
while(p){
ans = (ans + pw[p]) % mod;
p = fail[p];
}
if(ans < 1000) printf("0");
if(ans < 100) printf("0");
if(ans < 10) printf("0");
printf("%d\n", ans);
} int main()
{
scanf("%d%d", &n, &t); prepare();
while(t--){
scanf("%d", &len);
for(int i = 1; i <= len; ++i) scanf("%d", &s[i]);
KMP();
print();
}
return 0;
}
/*
1 9
36 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
*/

bzoi1152 [CTSC2006]歌唱王国Singleland的更多相关文章

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

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

  2. [CTSC2006]歌唱王国

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

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

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

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

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

  5. luogu P4548 [CTSC2006]歌唱王国

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

  6. 题解 [CTSC2006]歌唱王国

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

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

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

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

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

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

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

随机推荐

  1. LeetCode Array Easy 485. Max Consecutive Ones

    Description Given a binary array, find the maximum number of consecutive 1s in this array. Example 1 ...

  2. iconfont图标symbol引用方式,有的图标不能通过设置color样式来修改颜色的解决办法

    现象:iconfont安装后的图标,是通过symbol引用方式,有的图标不能通过color修改颜色的解决办法,有的又可以. <svg class="icon" aria-hi ...

  3. 关于TVS、ESD、稳压二极管、压敏电阻

    一.稳压管和TVS管的工作原理 稳压二极管(又叫齐纳二极管),是一种直到临界反向击穿电压前都具有很高电阻的半导体器件,在这临界击穿点上,反向电阻降低到一个很小的数值,在这个低阻区中电流增加而电压则保持 ...

  4. openstack创建一个虚拟机的过程

      为什要用云? 一.简单的说就是对资源更加合理的分配,使用,比如硬件的数量,带宽等等这些,因为你不能机器买来不需要了再卖掉(当然也可以),带宽跟机房签合同得来一年的,中间不够了也不能加,超了也不退钱 ...

  5. gelera集群详解

    [MySQL]galera集群原理简介   特性 基于行复制的完全并行同步复制实时多主架构,任意节点可读写无延迟复制,事务零丢失,可靠健壮的读写体验.自动化节点关系控制:节点故障自动摘除,节点加入自动 ...

  6. java使用对象类型作为方法的参数

  7. springboot全局字符编码设置

    1.在application.properties中设置 #编码格式 spring.http.encoding.force=true spring.http.encoding.charset=UTF- ...

  8. Java中的两种异常类型及其区别?

    Java中的两种异常类型是什么?他们有什么区别? Throwable包含了错误(Error)和异常(Excetion两类) Exception又包含了运行时异常(RuntimeException, 又 ...

  9. JavaScript之ECMAScript

    JavaScript脚本语言, 运行在浏览器上,无需编译, 轻量级的语言. 功能:让页面有执行逻辑的功能, 可以产生一些动态的效果 JavaScript = ECMAScript + BOM + DO ...

  10. 第二周作业—N42-虚怀若谷

    一.描述Linux发行版的系统目录名称命名规则以及用途 1.文件名命名规则 (1).文件名最长255字节 (2).包括路径在内的文件名称最长4095个字节 (3).除了斜扛和NUL,所有字符都有效.但 ...