BZOJ 2553: [BeiJing2011]禁忌【ACAM + 期望dp + 矩快优化
……反正瞎瘠薄搞搞,都是显然的
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define MAXN 80
using namespace std; int n,m,ji;struct Matrix{long double d[MAXN][MAXN];int x,y;Matrix():x(0),y(0){memset(d,0,sizeof d);}Matrix(int w):x(w),y(w){memset(d,0,sizeof d);for(int i=0;i<w;++i) d[i][i] = 1;}Matrix(int x,int y):x(x),y(y){memset(d,0,sizeof d);}Matrix operator * (const Matrix ano) {Matrix RTN(x,ano.y);for(register int i=0;i<x;++i)for(register int j=0;j<y;++j)for(register int k=0;k<ano.y;++k)RTN.d[i][k] += d[i][j] * ano.d[j][k];return RTN;}inline Matrix pow(int c){Matrix TMP = *this , RTN(x);for(;c;c>>=1,TMP=TMP*TMP)if(c&1)RTN = RTN * TMP;return RTN;}void write(){puts("");for(register int i=0;i<x;++i)for(register int j=0;j<y;++j)printf("%.0Lf%c",d[i][j],j==y-1?'\n':' ');puts("");}
}INIT,TRANS;long double f[MAXN][MAXN];
long double ans = 0;
long double p;
struct ACAM{int son[MAXN][26];int cnt_node,root; int fail[MAXN];int tag[MAXN];inline void init(){root = cnt_node = 1;}char s[20];inline void insert(int now){scanf("%s",s);for(char *i = s;*i;++i){int x = (*i) - 'a';if ( !son[now][x] ) son[now][x] = ++cnt_node;now = son[now][x];}tag[now] = 1;}int que[MAXN],head,tail;inline void bfs(int now){head = tail = 1;que[0] = now;for(register int x=0;x<ji;++x)if(son[now][x]) fail[ son[now][x] ] = now , que[tail++] = son[now][x];else son[now][x] = now;while(head^tail){now = que[head++];for(register int x=0;x<ji;++x)if(son[now][x])fail[ son[now][x] ] = son[ fail[now] ][x] ,que[tail++] = son[now][x] , tag[ son[now][x] ] |= tag[fail[son[now][x]]];else son[now][x] = son[ fail[now] ][x];}}inline void DP(int len){++cnt_node;INIT = Matrix(cnt_node,1);INIT.d[1][0] = 1;TRANS = Matrix(cnt_node,cnt_node);for(register int i=1;i<cnt_node;++i)for(register int x=0;x<ji;++x){int aim = son[i][x];if(!tag[aim]) TRANS.d[aim][i] += p;else{TRANS.d[1][i] += p;TRANS.d[0][i] += p;}}TRANS.d[0][0] = 1;INIT = TRANS.pow(len) * INIT;printf("%.6Lf",INIT.d[0][0]);
// f[0][1] = 1;
// for(int i=0;i<len;++i){
// for(int j=0;j<tail;++j){
// int now = que[j];
// for(int k = 0;k<ji;++k){
// if(tag[son[now][k]])
// ans += f[i][now]*p , f[i+1][root] += f[i][now]*p;
// else f[i+1][son[now][k]] += f[i][now]*p;
// }
// }
// }
// printf("%.6Lf",ans);}
}YJQ;int main(){YJQ.init();scanf("%d%d%d",&n,&m,&ji);p = (double)1/ji;for(register int i=1;i<=n;++i) YJQ.insert(YJQ.root);YJQ.bfs(YJQ.root);YJQ.DP(m);return 0;
}
BZOJ 2553: [BeiJing2011]禁忌【ACAM + 期望dp + 矩快优化相关推荐
- bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2553 看了题解才会-- 首先,给定一个串,最好的划分方式是按禁忌串出现的右端点排序,遇到能填 ...
- 【BZOJ】2553: [BeiJing2011]禁忌 AC自动机+期望+矩阵快速幂
[题意]给定n个禁忌字符串和字符集大小alphabet,保证所有字符在集合内.一个字符串的禁忌伤害定义为分割能匹配到最多的禁忌字符串数量(一个可以匹配多次),求由字符集构成的长度为Len的字符串的期望 ...
- 【BZOJ2553】禁忌,AC自动机+期望DP+矩乘
传送门 先考虑选最多禁忌串的问题 感受一下,如果禁忌串之间没有包含关系,一定是可以从前往后贪心搞的,直接建AC自动机跑匹配,找到一个禁忌串的末尾就回到根上,并把禁忌串数量+1 (所以起初我想的是把包含 ...
- BZOJ 3566: [SHOI2014]概率充电器 期望DP + 树形DP
Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1276 Solved: 558 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世 ...
- 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP
[题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...
- luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...
- [SCOI2008]奖励关(期望dp)
你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...
- 【bzoj4318】OSU! 期望dp
题目描述 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的0 ...
- 【loj6342】跳一跳 期望dp
题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...
最新文章
- 数据工厂 mysql_.net中利用数据工厂实现多数据库的操作
- Button的使用(三):处理点击事件
- 做互联网平台前要想清楚的5件事
- 一个循环、一个变量打印乘法口诀
- SiteServer CMS 新版本 V6.13(2019年11月1日发布)
- 一文看懂PCA主成分分析
- 如何从硬件到防火墙设置homelab
- 【Flink】This YARN version does not support getSchedulerResourceTypes
- 线性回归 + 基础优化算法 动手学深度学习v2 pytorch
- Linux属于开放代码,下面()操作系统是开放源代码的。
- Unity3D开发学习
- 不得不学的统计学基础知识(一)
- 软件开发的版本控制管理
- 296 最佳的碰头地点
- 计算机图片显示简单原理
- LTE Initial Attach 的过程以及相关消息的具体解析 (一)
- 名词用作动词举例_英语中名词做动词用的55个例句
- python虚拟机下载_虚拟机 python
- Node.js文档和教程
- 关于win10安装PingFangThin字体后换不回来的问题
热门文章
- LLMs:《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》翻译与解读
- V-REP教程(一)Joint
- ASP.NET MVC4 IN ACTION学习笔记-第二波
- python二值化特征_R与Python手牵手:特征工程(数值型变换)
- 汉澳sinox2013server版操作系统商用版发布
- MT6735芯片介绍,联发科6735处理器
- Java数组初始化三种方式
- Android中由IP地址查询经纬度坐标的实例
- AndroidStudio集成科大讯飞语音SDK
- css hover改变svg颜色