……反正瞎瘠薄搞搞,都是显然的

#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 + 矩快优化相关推荐

  1. bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2553 看了题解才会-- 首先,给定一个串,最好的划分方式是按禁忌串出现的右端点排序,遇到能填 ...

  2. 【BZOJ】2553: [BeiJing2011]禁忌 AC自动机+期望+矩阵快速幂

    [题意]给定n个禁忌字符串和字符集大小alphabet,保证所有字符在集合内.一个字符串的禁忌伤害定义为分割能匹配到最多的禁忌字符串数量(一个可以匹配多次),求由字符集构成的长度为Len的字符串的期望 ...

  3. 【BZOJ2553】禁忌,AC自动机+期望DP+矩乘

    传送门 先考虑选最多禁忌串的问题 感受一下,如果禁忌串之间没有包含关系,一定是可以从前往后贪心搞的,直接建AC自动机跑匹配,找到一个禁忌串的末尾就回到根上,并把禁忌串数量+1 (所以起初我想的是把包含 ...

  4. BZOJ 3566: [SHOI2014]概率充电器 期望DP + 树形DP

    Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1276 Solved: 558 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世 ...

  5. 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP

    [题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...

  6. luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...

  7. [SCOI2008]奖励关(期望dp)

    你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...

  8. 【bzoj4318】OSU! 期望dp

    题目描述 osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的0 ...

  9. 【loj6342】跳一跳 期望dp

    题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...

最新文章

  1. 状态估计问题学习记录(1)
  2. yii2手动添加图片处理插件Imagine
  3. LINUX API函数大全
  4. MyBatis中获取对应日期的记录的mapper语句
  5. 创建自定义Widgets小部件扩展
  6. 编译linux内核时出错
  7. appium java 点击事件_“按钮点击”在Appium Android测试中给出“处理命令时出现未知的服务器端错误 . ”...
  8. 前端开发 填充padding 0229
  9. 深度卷积生成对抗网络(DCGAN)原理与实现(采用Tensorflow2.x)
  10. web.config中文解释
  11. 获取单个数据库的邮箱数量
  12. 标注工具: Label Studio
  13. [BZOJ3503][CQOI2014]和谐矩阵
  14. oracle删除lob对象,ORACLE LOB大对象处理
  15. 联想服务器的主板型号怎么看,科技知识:联想主板型号怎么看
  16. 几款开源的ETL工具及ELT初探
  17. IAP程序在内测期间的各种问题
  18. 石墨烯 量子计算机,石墨烯鼓有望成为量子计算机内存
  19. java 蓝桥杯 Sine之舞
  20. 1.1 生日悖论+1.2快速排序+1.3字符串比较+1.4 随机算法+1.5 定理+1.6 抽样

热门文章

  1. 小控件——简单的留言评论删除模块
  2. 计算机的数学发展史论文,数学史毕业论文
  3. python全局变量操作详解_Python全局变量是什么?Python全局变量怎么使用?
  4. 贪心+二分 More Cowbell CodeForces - 604B
  5. 「技术工具」10个解放双手使用在线工具,有些代码真的不用手写
  6. NLPIR系统自动构建知识图谱核查招标文件
  7. 蓝牙模块选型及基础知识介绍
  8. System Design [youtube搬运] Tinder 笔记
  9. Peter Shirley Ray Tracing in One Weekend(上篇)
  10. 【阿里云在线编程】 53.Tom跳方格