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傻逼题 ...
最新文章
- 状态估计问题学习记录(1)
- yii2手动添加图片处理插件Imagine
- LINUX API函数大全
- MyBatis中获取对应日期的记录的mapper语句
- 创建自定义Widgets小部件扩展
- 编译linux内核时出错
- appium java 点击事件_“按钮点击”在Appium Android测试中给出“处理命令时出现未知的服务器端错误 . ”...
- 前端开发 填充padding 0229
- 深度卷积生成对抗网络(DCGAN)原理与实现(采用Tensorflow2.x)
- web.config中文解释
- 获取单个数据库的邮箱数量
- 标注工具: Label Studio
- [BZOJ3503][CQOI2014]和谐矩阵
- oracle删除lob对象,ORACLE LOB大对象处理
- 联想服务器的主板型号怎么看,科技知识:联想主板型号怎么看
- 几款开源的ETL工具及ELT初探
- IAP程序在内测期间的各种问题
- 石墨烯 量子计算机,石墨烯鼓有望成为量子计算机内存
- java 蓝桥杯 Sine之舞
- 1.1 生日悖论+1.2快速排序+1.3字符串比较+1.4 随机算法+1.5 定理+1.6 抽样
热门文章
- 小控件——简单的留言评论删除模块
- 计算机的数学发展史论文,数学史毕业论文
- python全局变量操作详解_Python全局变量是什么?Python全局变量怎么使用?
- 贪心+二分 More Cowbell CodeForces - 604B
- 「技术工具」10个解放双手使用在线工具,有些代码真的不用手写
- NLPIR系统自动构建知识图谱核查招标文件
- 蓝牙模块选型及基础知识介绍
- System Design [youtube搬运] Tinder 笔记
- Peter Shirley Ray Tracing in One Weekend(上篇)
- 【阿里云在线编程】 53.Tom跳方格