题意:http://www.lydsy.com/JudgeOnline/problem.php?id=2553

sol  :puts("nan"); (逃~

   ac自动机+矩阵快速幂

   先将所有的串放到ac自动机上,贪心匹配,对一个包含禁忌串的节点划分出一段

   设f[i][j]表示走了i步到达AC自动机上的j节点的概率

   转移方程为f[i+1][k]=f[i][j]/alphabet

   由于i较大,但是每一步的转移是一样的,所以可以用矩阵快速幂优化

   P.S.喜sang闻xin乐bing见kuang的出题人卡精度QAQ,需要开long double

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int Mx=;
struct Node { int l,r; long double f[Mx][Mx]; } str,final;
int n,m,cnt,len,num,ch[Mx][],fail[Mx],q[Mx],jud[Mx];
char s[Mx];
void build_trie()
{
int x=;
for(int i=;i<=m;i++)
{
if(!ch[x][s[i]-'a']) ch[x][s[i]-'a']=++cnt;
x=ch[x][s[i]-'a'];
if(jud[x]) break;
}
jud[x]=;
}
void get_fail()
{
int h=,t=;q[h]=;
while(h!=t)
{
int now=q[h++]; if(h>Mx) h=;
for(int i=;i<num;i++)
if(ch[now][i])
{
int x=ch[now][i],y=fail[now];
while(y&&(!ch[y][i])) y=fail[y];
if(ch[y][i]!=x) fail[x]=ch[y][i];
else fail[x]=;
q[t++]=x; if(t>Mx) t=;
}
else ch[now][i]=ch[fail[now]][i];
}
str.f[cnt+][cnt+]=;
}
Node mul(Node x,Node y)
{
Node tmp;tmp.l=x.l;tmp.r=y.r;
memset(tmp.f,,sizeof(tmp.f));
for(int k=;k<x.r;k++)
for(int i=;i<x.l;i++)
for(int j=;j<y.r;j++)
tmp.f[i][j]+=x.f[i][k]*y.f[k][j];
return tmp;
}
void build()
{
get_fail();
long double tmp=(long double) /num;
for(int i=;i<=cnt;i++)
if(!jud[i])
for(int j=;j<num;j++)
if(jud[ch[i][j]]) str.f[i][cnt+]+=tmp,str.f[i][]+=tmp;
else str.f[i][ch[i][j]]+=tmp;
str.f[cnt+][cnt+]=;
}
void dfs(int x)
{
if(jud[x])
for(int i=;i<num;i++) ch[x][i]=;
else
for(int i=;i<num;i++)
if(ch[x][i]) dfs(ch[x][i]);
}
void pre()
{
scanf("%d%d%d",&n,&len,&num);
for (int i=;i<=n;i++)
{
scanf("%s",s+); m=strlen(s+);
build_trie();
}
dfs();
str.l=str.r=cnt+;
final.l=,final.r=cnt+,final.f[][]=;
}
int main()
{
pre();
build();
for( ;len;len>>=,str=mul(str,str)) if(len&) final=mul(final,str);
printf("%.9lf",(double) final.f[][cnt+]);
}

bzoj2553【beijing2011】禁忌的更多相关文章

  1. BZOJ2553: [BeiJing2011]禁忌

    2553: [BeiJing2011]禁忌 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 203  Solved: ...

  2. [BZOJ2553][BeiJing2011]禁忌 dp+AC自动机+矩阵快速幂

    2553: [BeiJing2011]禁忌 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1206  Solved ...

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

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

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

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

  5. BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)

    考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i ...

  6. BZOJ2553 [BeiJing2011]禁忌 【AC自动机 + dp + 矩乘优化】

    题目链接 BZOJ2553 题解 话说在前,此题卡精度,最好开long double 先建\(AC\)自动机 求期望,逆着求,设\(f[i][j]\)为长度为\(i\)的串,当前匹配AC自动机\(j\ ...

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

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

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

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

  9. 【bzoj2553】[BeiJing2011]禁忌

    2553: [BeiJing2011]禁忌 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 595  Solved: ...

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

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

随机推荐

  1. MintLinux

    最近将我的mintlinux进行了一系列外观优化,总算好看了一点

  2. Apache 查找httpd.conf文件

    Linux下查找httpd.conf文件 $ find / -name httpd.conf  

  3. 快速搭建lvs + keepalived + nginx

      环境:   VIP         192.168.2.224 LVS        192.168.2.217     centos7 nginx1    192.168.2.231     c ...

  4. java抓取12306火车余票信息

    最近在弄一个微信的公众帐号,涉及到火车票查询,之前用的网上找到的一个接口,但只能查到火车时刻表,12306又没有提供专门的查票的接口.今天突然想起自己直接去12306上查询,抓取查询返回的数据包,这样 ...

  5. h5获取摄像头拍照功能

    完整代码展示 <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <met ...

  6. 大数据小项目之电视收视率企业项目09--hive环境搭建

    Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据.它架构在Hadoop之上,总归为大数据,并使得查询和分析方便.并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务 ...

  7. 洛谷P2389 电脑班的裁员(区间DP)

    题目背景 隔壁的新初一电脑班刚考过一场试,又到了BlingBling的裁员时间,老师把这项工作交给了ZZY来进行.而ZZY最近忙着刷题,就把这重要的任务交(tui)给了你. 题目描述 ZZY有独特的裁 ...

  8. 学习BootStrap3.3.4——敲完全局CSS样式

    历时7小时- -(算上晚饭)终于敲完BootStrap CSS样式部分.还是第一次这么持久的敲纯前端,连JS都没有. 正好趁这机会熟悉了Sublime,主要是各个快捷键的用法.目前用到最多的: 而且s ...

  9. JDK各版本新特性浅谈

    JDK 5.0 自动拆装箱 枚举 可变参数 泛型 For -each 内省 静态导入 JDK 6.0 console开发控制台程序 轻量级HTTP ServerAPI 支持脚本语言 使用Compile ...

  10. C# datagridview列绑定类中类的属性

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://www.cnblogs.com/linghaoxinpian/p/5906374. ...