bzoj2553【beijing2011】禁忌
题意: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】禁忌的更多相关文章
- BZOJ2553: [BeiJing2011]禁忌
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 203 Solved: ...
- [BZOJ2553][BeiJing2011]禁忌 dp+AC自动机+矩阵快速幂
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1206 Solved ...
- BZOJ2553 [BeiJing2011]禁忌 AC自动机 矩阵
原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alph ...
- BZOJ2553[BeiJing2011]禁忌——AC自动机+概率DP+矩阵乘法
题目描述 Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传 ...
- BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)
考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i ...
- BZOJ2553 [BeiJing2011]禁忌 【AC自动机 + dp + 矩乘优化】
题目链接 BZOJ2553 题解 话说在前,此题卡精度,最好开long double 先建\(AC\)自动机 求期望,逆着求,设\(f[i][j]\)为长度为\(i\)的串,当前匹配AC自动机\(j\ ...
- 【BZOJ】2553: [BeiJing2011]禁忌 AC自动机+期望+矩阵快速幂
[题意]给定n个禁忌字符串和字符集大小alphabet,保证所有字符在集合内.一个字符串的禁忌伤害定义为分割能匹配到最多的禁忌字符串数量(一个可以匹配多次),求由字符集构成的长度为Len的字符串的期望 ...
- 【BZOJ2553】[BeiJing2011]禁忌 AC自动机+期望DP+矩阵乘法
[BZOJ2553][BeiJing2011]禁忌 Description Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平. ...
- 【bzoj2553】[BeiJing2011]禁忌
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 595 Solved: ...
- bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2553 看了题解才会…… 首先,给定一个串,最好的划分方式是按禁忌串出现的右端点排序,遇到能填 ...
随机推荐
- Python02 变量
变量 因为Python是弱变量类型编程语言,所以变量赋值不需要类型声明. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 变量 ...
- React后台管理系统-table-list组件
table-list组件可用于商品列表,用户列表页面 需要传入一个tableHeads集合和tablebody import React from 'react'; // 通用的列表 class ...
- vue-awesome-swiper实现轮播图
1.首先通过npm安装vue-awesome-swiper,我在项目中用的是2.6.7版本 npm install vue-awesome-swiper@2.6.7 –save 2. 在main.js ...
- 前端小记2——移动web解决方案
面向用户级移动web解决方案: 1.代码结构规范 2.字体设置 body{ font-family: -apple-system, BlinkMacSystemFont, "PingFang ...
- windows 安装nodejs及配置服务
一.什么是nodejs Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V8引 擎执行Javascript的速度非常快,性能非常好.N ...
- 短短几行css代码实现滚动条效果
如何实现使用css实现滚动条效果 实现效果,运用线性渐变来实现功能 假设我们的页面被包裹在 <body> 中,可以滚动的是整个 body,给它添加这样一个从左下到到右上角的线性渐变: bo ...
- 4.在Cisco Packet Tracerl里路由器密码重置
在路由器的特权模式的密码忘记的情况下,关闭路由器的电源,在接通电源,在路由器载入的时候,按ctrl+c,直接进入monitor模式 输入:confreg 0x2142 reset 重新进入后 enab ...
- SSM(Spring+Spring MVC+Mybatis)开发前台后功能完整的java开源博客管理系统
项目描述 本项目通过SSM(SpringMVC+Mybatis+Spring)框架编写的一个人博客管理系统,使用hexo主题,以及MAVEN进行对项目管理,并且前端具有粒子和点击爱心效果.后端的页面框 ...
- Python学习笔记(七)加密加盐
MD5加密和加盐 Python的MD5加密 Python的hashlib模块的MD5加密,是比较简单一种加密,md5函数必须传入编译后的结果,否则会报错: Traceback (most recent ...
- 分数调查 HihoCoder - 1515
小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测验的成绩,所以小Hi只能得到一些小道消息,例如X号同学的分数比Y号同学的分数高S分. 小Hi想知道利用这 ...