#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. 4.git "Could not read from remote repository.Please make sure you have the correct access rights."解决方案

    转自:https://zhiku8.com/git-could-not-read-from-remote-repository.html 我们在使用git clone 或其他命令的时候,有时候会遇到这 ...

  2. .NET框架详解

    .NET框架的战略目标 .NET框架的战略目标是在任何时候(When),任何地方(Where),使用任何工具(What)都能通过.NET的服务获得网络上的任何信息,享受网络带给人们的便捷和快乐! .N ...

  3. oracle-常见的执行计划(一)

    一.表访问方式 CBO基础概念中有讲到,访问表的方式有两种:全表扫描和ROWID扫描. 全表扫描的执行计划:TABLE ACCESS FULL ROWID扫描对应执行计划:TABLE ACCESS B ...

  4. Django(part2)

    admin site:django自带了admin site,我们需要创建能访问site的用户 #以交互的方式创建超级用户 manage.py createsuperuser 如果要把model加到a ...

  5. 2019Pycharm激活方法

    1.将“0.0.0.0 account.jetbrains.com”添加到hosts文件中 2.打开http://idea.lanyus.com/ 3.获取激活码,粘贴到第二个选项中 亲测可用.

  6. swift语言点评八-枚举

    总结:swift中的枚举可以看作变量可以作为case匹配参数的类 Enumerations 枚举的作用:状态列举与匹配 枚举值与类型 If a value (known as a “raw” valu ...

  7. django框架-DRF工程之权限功能

    1.相对于flask,原生而言django,DRF做的则更加的合理化,想要给予用户相应的权限,首先需要在settings中进行配置 REST_FRAMEWORK = { 'DEAFAULT_PERMI ...

  8. (三)React基础

    3-1 使用React编写TodoList功能 import { Fragment} from ‘react’ Fragment是占位符 用于替代最外层div元素, 防止生成的元素会有两层div嵌套这 ...

  9. css 遮照镂空效果

    实现这个效果有以下几种方式.(欢迎指出不足之处!!!)  一:最简单最粗暴的方法!截图! 实现原理:先截一张图片,然后写一个遮罩层,再把图片放上去就可以了! 过程过于简单,就别写代码跟截图效果了! 优 ...

  10. [洛谷P1750]KC喝咖啡

    题目大意:给你n个物品,每个物品有一个价值$v_i$和一个时间$t_i$,要你取m个物品,使得他们的美味度($\frac{\sum v_i}{\sum t_i}$)最大,求这个美味度. 解题思路:由于 ...