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

#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. 数据工厂 mysql_.net中利用数据工厂实现多数据库的操作
  2. Button的使用(三):处理点击事件
  3. 做互联网平台前要想清楚的5件事
  4. 一个循环、一个变量打印乘法口诀
  5. SiteServer CMS 新版本 V6.13(2019年11月1日发布)
  6. 一文看懂PCA主成分分析
  7. 如何从硬件到防火墙设置homelab
  8. 【Flink】This YARN version does not support getSchedulerResourceTypes
  9. 线性回归 + 基础优化算法 动手学深度学习v2 pytorch
  10. Linux属于开放代码,下面()操作系统是开放源代码的。
  11. Unity3D开发学习
  12. 不得不学的统计学基础知识(一)
  13. 软件开发的版本控制管理
  14. 296 最佳的碰头地点
  15. 计算机图片显示简单原理
  16. LTE Initial Attach 的过程以及相关消息的具体解析 (一)
  17. 名词用作动词举例_英语中名词做动词用的55个例句
  18. python虚拟机下载_虚拟机 python
  19. Node.js文档和教程
  20. 关于win10安装PingFangThin字体后换不回来的问题

热门文章

  1. LLMs:《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》翻译与解读
  2. V-REP教程(一)Joint
  3. ASP.NET MVC4 IN ACTION学习笔记-第二波
  4. python二值化特征_R与Python手牵手:特征工程(数值型变换)
  5. 汉澳sinox2013server版操作系统商用版发布
  6. MT6735芯片介绍,联发科6735处理器
  7. Java数组初始化三种方式
  8. Android中由IP地址查询经纬度坐标的实例
  9. AndroidStudio集成科大讯飞语音SDK
  10. css hover改变svg颜色