题意: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. Jmeter命令行参数

    一.在linux中,使用非gui的方式执行jmeter.若需更改参数,必须先编辑jmx文件,找到对应的变量进行修改,比较麻烦.因此,可以参数化一些常用的变量,直接在Jmeter命令行进行设置 二.参数 ...

  2. Beyond Compare在Mac下永久试用

    转自 作者:忆如初 链接:https://www.jianshu.com/p/596b4463eacd 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. 亲测可用 一. ...

  3. 两个list缩进为一个list,python

    # w_list = ['a', 'b', 'c', 'd'] # e_list = ['c', 'd', 'b', 'a'] w_list = ['a', 'b', 'c', 'd', 'ff', ...

  4. 利用Filter解决跨域请求的问题

    1.为什么出现跨域. 很简单的一句解释,A系统中使用ajax调用B系统中的接口,此时就是一个典型的跨域问题,此时浏览器会出现以下错误信息,此处使用的是chrome浏览器. 错误信息如下: jquery ...

  5. jquery/js/a标签实现当前页面跳转的两种方法

    在逛购物网站首页时经常看到侧边导航栏,当我们点击导航栏中某一项时会跳转到当前页面的某一处 有两种方法实现,一种是利用js计算好各位置的高度,通过绑定事件使页面跳转到指定位置,另一种是利用a标签进行当前 ...

  6. ThinkPHP邮件发送S(Smtp + Mail + phpmailer)

    三种邮件发送介绍:(Smtp,Mail以及phpmailer)ThinkPhp 框架下开发. 邮件发送配置先前准备(用该账号做测试用):(这里用新浪邮箱服务器)将自己的新浪邮箱开通 POP3/SMTP ...

  7. python3 练习题100例 (十)

    题目十:判断101-200之间有多少个素数,并输出所有素数. #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 题目十 ...

  8. 动态规划:HDU-1203-0-1背包问题:I NEED A OFFER!

    解题心得: 动态规划就是找到状态转移方程式,但是就本题0-1背包问题来说转移方程式很简单,几乎看模板就行了. 在本题来说WA了很多次,很郁闷,因为我记录v[i]的时候i是从0开始的,一些特殊数据就很尴 ...

  9. Linux命令之---pwd

    命令简介 Linux中用 pwd 命令用来查看”当前工作目录“的完整路径. 命令格式 pwd [选项] 命令功能和参数 功能:查看”当前工作目录“的完整路径:参数:一般情况下不带任何参数,如果目录是链 ...

  10. 分治 - 计算几何 - BZOJ2458,[BeiJing2011]最小三角形

    http://www.lydsy.com/JudgeOnline/problem.php?id=2458 [BeiJing2011]最小三角形 描述 Frisk现在遇到了一个有趣的问题. 平面上有N个 ...