#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<cstdlib>
#include<iostream>
using namespace std;
void setIO(string a){
freopen((a+".in").c_str(),"r",stdin);
}
#define db long double
#define maxn 100000 char arr[maxn]; int sigma, nodes, n;
struct matrix{
long double mat[150][150];
}unit; void init(matrix &a){
for(int i=0;i<=n;++i)
for(int j=0;j<=n;++j) a.mat[i][j]=0;
}
void get(matrix &a){
init(a);
for(int i=0;i<=n;++i) a.mat[i][i]=1;
}
matrix operator*(matrix a,matrix b){
matrix c;
init(c);
for(int i=0;i<=n;++i)
for(int j=0;j<=n;++j)
for(int k=0;k<=n;++k) c.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
return c;
}
matrix operator^(matrix a,int p){
matrix ans;
get(ans);
while(p){
if(p&1) ans=ans*a;
a=a*a;
p>>=1;
}
return ans;
}
struct Automaton{
int ch[maxn][30], fail[maxn], tag[maxn];
#define idx str[i]-'a'
void insert(char str[]){
int cnt=strlen(str),j=0;
for(int i=0;i<cnt;++i) {
if(!ch[j][idx]) ch[j][idx]=++nodes;
j=ch[j][idx];
}
tag[j]=true, n=nodes+1;
} queue<int>Q;
bool vis[maxn];
void build(){
for(int i=0;i<sigma;++i) if(ch[0][i]) Q.push(ch[0][i]);
while(!Q.empty()){
int u=Q.front();Q.pop();
for(int i=0;i<sigma;++i){
int r=ch[u][i];
if(!r){ ch[u][i]=ch[fail[u]][i]; continue;}
Q.push(r), fail[r]=ch[fail[u]][i], tag[r]|=tag[fail[r]];
}
}
init(unit);
Q.push(0), vis[0]=true;
long double tmp=(long double)1/sigma;
while(!Q.empty()){
int u=Q.front();Q.pop();
for(int i=0;i<sigma;++i){
if(!vis[ch[u][i]]) vis[ch[u][i]]=true, Q.push(ch[u][i]);
if(tag[ch[u][i]]) unit.mat[u][0]+=tmp, unit.mat[u][n]+=tmp;
else unit.mat[u][ch[u][i]]+=tmp;
}
unit.mat[n][n]=1;
}
}
}aho;
int main(){
//setIO("input");
int m,len;
scanf("%d%d%d",&m,&len,&sigma);
for(int i=1;i<=m;++i) scanf("%s",arr), aho.insert(arr);
aho.build();
matrix g=unit^len;
printf("%.10f",(double)g.mat[0][n]);
return 0;
}

  

说实话还是有点不太理解.....

Code:

[BJWC2011]禁忌 AC 自动机 概率与期望的更多相关文章

  1. BZOJ2553[BeiJing2011]禁忌——AC自动机+概率DP+矩阵乘法

    题目描述 Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传 ...

  2. [BJOI2011]禁忌 --- AC自动机 + 矩阵优化 + 期望

    bzoj 2553 [BJOI2011]禁忌 题目描述: Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi ...

  3. BZOJ 1444: [Jsoi2009]有趣的游戏 AC自动机+概率与期望+矩阵乘法

    这道题还比较友好~首先,构建出来 $AC$ 自动机,那么我们要求的就是从 $0$ 号点走无限次走到一个终止节点的概率. 考虑构建转移矩阵 $M,$ $M_{i,j}$ 表示节点 $i$ 转移到节点 $ ...

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

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

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

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

  6. 【BZOJ2553】[BeiJing2011]禁忌 AC自动机+期望DP+矩阵乘法

    [BZOJ2553][BeiJing2011]禁忌 Description Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平. ...

  7. 4.23 子串 AC自动机 概率期望 高斯消元

    考虑40分. 设出状态 f[i]表示匹配到了i位还有多少期望长度能停止.可以发现这个状态有环 需要高斯消元. 提供一种比较简单的方法:由于期望的线性可加性 可以设状态f[i]表示由匹配到i到匹配到i+ ...

  8. BZOJ2553 [BeiJing2011]禁忌 AC自动机 矩阵

    原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alph ...

  9. 【BZOJ1444】[Jsoi2009]有趣的游戏 AC自动机+概率DP+矩阵乘法

    [BZOJ1444][Jsoi2009]有趣的游戏 Description Input 注意 是0<=P Output Sample Input Sample Output HINT  30%的 ...

随机推荐

  1. yum 命令讲解

    (一)yum介绍 Yum(全称为 Yellow dogUpdater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定 ...

  2. hbase的命令

    1.1. 命令 名称 命令表达式 创建表 create '表名', '列族名1','列族名2','列族名N' 查看所有表 list 描述表 describe  ‘表名’ 判断表存在 exists  ' ...

  3. 51nod 1649 齐头并进 (djikstra求最短路径,只用跑一次)

    题目: 这道题有一个坑点:两种交通工具同时出发,中途不能停留在同一个小镇. 其实想通了就很简单,因为要么火车一步到达,要么汽车一步到达.不可能停留在同一个地方. 可是我还WA了好几次,蠢哭.想用BFS ...

  4. 使用Mapping实现的以太坊智能合约的代码

    Step 1: 创建一个基础合约 pragma solidity ^0.4.7; contract Coin { address public minter; mapping (address =&g ...

  5. XManager远程Linux 安装Oracle 图形化界面xstart解决方法

    一.安装Oracle_11g_R21.安装所必要的软件包:(CentOS)参见官方文档-rw-r--r--. 1 oracle oinstall 1358454646 Feb  5 22:57 p10 ...

  6. atom安装插件失败 latex

    用atom写latex 链接 http://www.cnblogs.com/schaepher/p/5934184.html 但在gui下安装插件失败 按照以下步骤解决了 安装gitbash cd . ...

  7. VP红外遥控器实现

    要点: 1.设置外部中断为边沿触发(包含下降沿和上升沿),下降沿TimeOut=0,上升沿读取TimeOut计数. 2.定时器中TimeOut++,定时器定时中断周期为100us 3.红外的只有两种时 ...

  8. 3ds Max修改桌面快捷方式为中文语言

    通过上篇教程的学习,我们已经会切换3ds Max 2018的界面语言了,相关内容可参阅3ds Max如何设置中文界面.但是如果每次都要从开始菜单进行操作,岂不麻烦?简单一点,可以在桌面添加3ds Ma ...

  9. js指定区域全屏

    <html>     <head>         <title>js指定区域全屏</title>         <style>      ...

  10. mac pro配置php开发环境

    mac pro自带php和apache,所以我们只要配置下就好了 // 启动Apache服务 sudo apachectl start // 重启Apache服务 sudo apachectl res ...