bzoi1152 [CTSC2006]歌唱王国Singleland
[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的更多相关文章
- 【BZOJ】1152: [CTSC2006]歌唱王国Singleland
题解 读错题了,是最后留下一个牛人首长歌颂他,和其他人没有关系,t就相当于数据组数 结论题,具体可看 https://www.zhihu.com/question/59895916/answer/19 ...
- [CTSC2006]歌唱王国
[CTSC2006]歌唱王国 Tags:题解 题意 链接:在空串后不断随机添加字符,直到出现串\(S_i\)为止.求最终串的期望长度.\(\sum |S_i|\le 5*10^6\) 题解 以下内容来 ...
- 洛谷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) = \ ...
- luogu P4548 [CTSC2006]歌唱王国
传送门 这题\(\mathrm{YMD}\)去年就讲了,然而我今年才做(捂脸) 考虑生成函数,设\(f_i\)表示最终串长为\(i\)的概率,其概率生成函数为\(F(x)=\sum f_ix^i\), ...
- 题解 [CTSC2006]歌唱王国
题目传送门 Desctiption 见题面. Solution 人类智慧... 考虑这样一个赌博游戏,现在有一个猴子,它随机从 \(1\sim n\) 中选一个打出来.现在有若干个赌徒,他们一开始都有 ...
- 洛谷 P4548 - [CTSC2006]歌唱王国(概率生成函数)
洛谷题面传送门 PGF 入门好题. 首先介绍一下 PGF 的基本概念.对于随机变量 \(X\),满足 \(X\) 的取值总是非负整数,我们即 \(P(v)\) 表示 \(X=v\) 的概率,那么我们定 ...
- 【BZOJ1152】歌唱王国(生成函数,KMP)
[BZOJ1152]歌唱王国(生成函数,KMP) 题面 BZOJ 洛谷 题解 根据\(YMD\)论文来的QwQ. 首先大家都知道普通型生成函数是\(\displaystyle \sum_{i=0}^{ ...
- 【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差
[题解]歌唱王国(概率生成函数+KMP)+伦讲的求方差 生成函数的本质是什么呀!为什么和It-st一样神 设\(f_i\)表示填了\(i\)个时候停下来的概率,\(g_i\)是填了\(i\)个的时候不 ...
随机推荐
- 2018-11-3-git-分支改名
title author date CreateTime categories git 分支改名 lindexi 2018-11-3 12:49:9 +0800 2018-2-13 17:23:3 + ...
- Linux知识-不断更新2
为了自己看的更清楚,也为了不断的总结,每次更新后都会另发一篇. 工作中遇到某一文件夹磁盘空间不够,当然每次都是清理日志,最后发现还是不太行,还不能扩容,只能先想办法迁移目录,避免此问题发生,但在这之前 ...
- Python元类之由浅入深
前言 元类属于python面向对象编程的深层次的魔法,非常重要,它使我们可以更好的掌控类从创建到消亡的整个生命周期过程.很多框架的源码中都使用到了元类.例如 Django Framework 中的 ...
- bzoj4489 [Jsoi2015]地铁线路 最短路
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4489 题解 感觉又被骗了.看这道题的 AC 人数不多,以为是一道很好的题目.结果发现是一个非常 ...
- Linux 多个cpp文件的编译(Makefile)
打包so文件: CC = g++ CFLAGS=-Wall -O2 -fPIC TARGET = libbg.so SRCS := $(wildcard *.cpp) OBJS := $(patsub ...
- js DOM0级事件和DOM2级事件
注册事件有两种方式,分别是DOM0级和DOM2级 DOM0级就是通过事件绑定的形式dom元素只能有(绑定)一个事件处理函数,他的特点是同一个元素绑定相同事件, 后面函数会覆盖前面的 绑定: dom.o ...
- 七、单例设计模式共享数据分析、解决、call_once
一.设计模式大概谈 代码的一些写法,与常规的写法不太一样,程序灵活,维护起来很方便,但是别人接管.阅读代码很痛苦. 用设计模式理念写出来的代码很晦涩.<< head first>&g ...
- 用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件
用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...
- 2019 牛客暑期多校 第二场 H Second Large Rectangle (单调栈)
题目:https://ac.nowcoder.com/acm/contest/882/H 题意:一个大的01矩阵,然后现在要求第二大的全一矩阵是多少 思路:在这里我们首先学习一下另一个东西,怎么求直方 ...
- CSS基础知识复习
1. CSS优先级 标签内部属性 style定义的CSS > 文档内定义的css > 引用外部CSS文件 2. CSS选择器类型 . 标签选择器 . 类选择器(使用.做标识) . ID选择 ...