Luogu4548 CTSC2006 歌唱王国 概率生成函数、哈希
orz ymd
考虑构造生成函数:设\(F(x) = \sum\limits_{i=0}^\infty f_ix^i\),其中\(f_i\)表示答案为\(i\)的概率;又设\(G(x) = \sum\limits_{i=0}^\infty g_ix^i\),其中\(g_i\)表示经过了\(i\)步之后还没有结束的概率。那么答案显然是\(F'(1)\)。
考虑在还没有结束的序列之后加入一个字符,那么有可能结束也有可能没有结束,即\(F(x) + G(x) = xG(x) + 1\)。
两边求导并将\(x=1\)代入可以得到\(F'(1) = G(1)\)。
接下来考虑在还没有结束的序列之后加入当前需要匹配的字符串,那么一定会结束,但有可能已经存在一个前缀满足条件。设\(a_i\)表示原字符串是否有长度为\(i\)的border,那么不难得到\(G(x)(\frac{x}{n})^m = \sum\limits_{i=1}^m a_iF(i)(\frac{x}{n})^{m-i}\)。
将\(x=1\)代入可以得到\(G(1) = \sum\limits_{i=1}^m a_in^i\)
那么使用哈希或者KMP求出所有的\(a_i\)即可求出答案。
#include<bits/stdc++.h>
//this code is written by Itst
using namespace std;
int read(){
int a = 0; char c = getchar();
while(!isdigit(c)) c = getchar();
while(isdigit(c)){
a = a * 10 + c - 48; c = getchar();
}
return a;
}
#define int long long
const int _ = 1e5 + 7;
const int seed = 2344259 , MOD = 134093753;
int powsd[_] , N , T , M;
namespace Hashing{
int val[_];
void init(int len){
for(int i = 1 ; i <= len ; ++i)
val[i] = (1ll * val[i - 1] * seed + read()) % MOD;
}
int qry(int l , int r){return (val[r] - val[l - 1] * powsd[r - l + 1] % MOD + MOD) % MOD;}
}
signed main(){
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
freopen("out","w",stdout);
#endif
powsd[0] = 1; powsd[1] = seed;
for(int i = 2 ; i <= 1e5 ; ++i)
powsd[i] = 1ll * powsd[i - 1] * seed % MOD;
N = read() % 10000; T = read();
for(int i = 1 ; i <= T ; ++i){
int L = read() , sum = 0 , tms = N; Hashing::init(L);
for(int j = 1 ; j <= L ; ++j , tms = tms * N % 10000)
if(Hashing::qry(1 , j) == Hashing::qry(L - j + 1 , L))
sum = (sum + tms) % 10000;
printf("%04lld\n" , sum);
}
return 0;
}
Luogu4548 CTSC2006 歌唱王国 概率生成函数、哈希的更多相关文章
- 【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差
[题解]歌唱王国(概率生成函数+KMP)+伦讲的求方差 生成函数的本质是什么呀!为什么和It-st一样神 设\(f_i\)表示填了\(i\)个时候停下来的概率,\(g_i\)是填了\(i\)个的时候不 ...
- [CTSC2006]歌唱王国
[CTSC2006]歌唱王国 Tags:题解 题意 链接:在空串后不断随机添加字符,直到出现串\(S_i\)为止.求最终串的期望长度.\(\sum |S_i|\le 5*10^6\) 题解 以下内容来 ...
- 【BZOJ1152】歌唱王国(生成函数,KMP)
[BZOJ1152]歌唱王国(生成函数,KMP) 题面 BZOJ 洛谷 题解 根据\(YMD\)论文来的QwQ. 首先大家都知道普通型生成函数是\(\displaystyle \sum_{i=0}^{ ...
- bzoi1152 [CTSC2006]歌唱王国Singleland
[CTSC2006]歌唱王国Singleland Time Limit: 30 Sec Memory Limit: 162 MB Description 在歌唱王国,所有人的名字都是一个非空的仅包含整 ...
- 洛谷 P4548 - [CTSC2006]歌唱王国(概率生成函数)
洛谷题面传送门 PGF 入门好题. 首先介绍一下 PGF 的基本概念.对于随机变量 \(X\),满足 \(X\) 的取值总是非负整数,我们即 \(P(v)\) 表示 \(X=v\) 的概率,那么我们定 ...
- 洛谷P4548 [CTSC2006]歌唱王国(概率生成函数)
题面 传送门 给定一个长度为\(L\)的序列\(A\).然后每次掷一个标有\(1\)到\(m\)的公平骰子并将其上的数字加入到初始为空的序列\(B\)的末尾,如果序列B中已经出现了给定序列\(A\), ...
- luogu P4548 [CTSC2006]歌唱王国
传送门 这题\(\mathrm{YMD}\)去年就讲了,然而我今年才做(捂脸) 考虑生成函数,设\(f_i\)表示最终串长为\(i\)的概率,其概率生成函数为\(F(x)=\sum f_ix^i\), ...
- 【BZOJ】1152: [CTSC2006]歌唱王国Singleland
题解 读错题了,是最后留下一个牛人首长歌颂他,和其他人没有关系,t就相当于数据组数 结论题,具体可看 https://www.zhihu.com/question/59895916/answer/19 ...
- 题解 [CTSC2006]歌唱王国
题目传送门 Desctiption 见题面. Solution 人类智慧... 考虑这样一个赌博游戏,现在有一个猴子,它随机从 \(1\sim n\) 中选一个打出来.现在有若干个赌徒,他们一开始都有 ...
随机推荐
- 特征的非线性变换(Feature Non-linear Transformation)
有时候特征x和目标y不呈线性关系,线性模型y=wx+b不能很好地反映事物的规律或者无法对事物进行有效分类,因此此时我们需要使用非线性模型. (x=([x1,x2,...,xn])T,w=([w1,w2 ...
- shell脚本编程基础之case语句
基础简介 脚本编程分为: 面向过程 选择结构:if语句,单分支.双分支.多分支:case语句 控制结构:顺序结构(默认) 循环结构:for.while.until 面向对象 case语句结构 case ...
- 安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令
没错就是这么神奇,名字相当噶性,thefuck.当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令. 在你输入错误的命令的时候,忍俊不禁的想来一句fuck,没错你不仅可以嘴上说,命令里面 ...
- select count(1)和 select count(*)
),其实就是计算一共有多少符合条件的行. 1并不是表示第一个字段,而是表示一个固定值. 其实就可以想成表中有这么一个字段,这个字段就是固定值1,),就是计算一共有多少个1. 同理,),也可以,得到的值 ...
- spring boot 防止重复提交
服务器端实现方案:同一客户端在2秒内对同一URL的提交视为重复提交 上代码吧 pom.xml <?xml version="1.0" encoding="UTF-8 ...
- C++之宏、extern关键字与多线程
理解C++ 宏 1.特殊字符 考虑下面的需求,程序中多处使用文本字符串.我们知道文本字符串前后都要加上双引号,我很讨厌输入双引号.有没有好的办法呢?根据常识,使用下面的宏: #define Str(x ...
- Dolly
dolly - 必应词典 美['dɑli]英['dɒli] n.洋娃娃:(搬运重物的)台车 v.用独轮车运(物):用搅拌棒洗(衣):用捣棒捣碎(矿石) 网络多莉:多利:移动式摄影小车 变形复数:dol ...
- mac上使用sips命令快速裁剪、旋转、翻转图片
mac上使用sips命令快速裁剪.旋转.翻转图片 日常开发工作中,经常碰到要对图片进行一些简单的处理,不需要动用PS,在mac上就有一个很好的命令行工具:sips 这里我们不具体展开讲,仅贴出几个常用 ...
- 企业架构 Red Hat Drools KIE Project 三大核心产品
美团放弃Drools自研规则引擎: https://blog.csdn.net/qq_18603599/article/details/80767912 Drools rule engine虽然好,但 ...
- git远程版本回退
本文为博主原创,未经允许不得转载: 之前在git提交版本时,发现将新开发的代码提交到了另一个分支上,为了不影响提交分支代码的 功能,需要回退到之前的版本. 在使用命令回退的时候,一直没有回退成功,有个 ...