n个等长字符串,机器会随机输出一个字符串(每个字母出现的概率为p[i]),问每个字符串第一个出现的概率是多少。

显然建出AC自动机,套路地f[i][j]表示i时刻位于节点j的概率。

构建转移矩阵,当i为某个子串结束节点时A[i][i]=1,否则A[i][j]+=p[j]。

虽然事件总数无穷大,矩阵自乘50次就可以较为精确地得到结果了。

注意AC自动机的节点是从0开始的。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
typedef long double ld;
using namespace std; const int N=;
char str[N];
ld x,y,p[N];
int n,len,m,nd,q[N],fail[N],ch[N][],pos[N],b[N]; struct Mat{
ld a[N][N];
ld* operator [](int x){ return a[x]; }
Mat(){ memset(a,,sizeof(a)); }
}A; Mat mul(Mat &a,Mat &b){
Mat c;
rep(i,,nd) rep(j,,nd) rep(k,,nd) c[i][k]+=a[i][j]*b[j][k];
return c;
} void ins(char s[],int id){
int x=;
rep(i,,len){
int c=s[i]-'A'+;
if (!ch[x][c]) ch[x][c]=++nd;
x=ch[x][c];
}
pos[id]=x; b[x]=;
} void getfail(){
int st=,ed=;
rep(i,,m) if (ch[][i]) q[++ed]=ch[][i];
while (st<ed){
int x=q[++st];
rep(i,,m){
if (ch[x][i]) fail[ch[x][i]]=ch[fail[x]][i],q[++ed]=ch[x][i];
else ch[x][i]=ch[fail[x]][i];
}
}
} int main(){
freopen("bzoj1444.in","r",stdin);
freopen("bzoj1444.out","w",stdout);
scanf("%d%d%d",&n,&len,&m);
rep(i,,m) scanf("%Lf%Lf",&x,&y),p[i]=x/y;
rep(i,,n) scanf("%s",str+),ins(str,i);
getfail();
rep(i,,nd){
if (b[i]) { A[i][i]=; continue; }
rep(j,,m) A[i][ch[i][j]]+=p[j];
}
rep(i,,) A=mul(A,A);
rep(i,,n) printf("%.2lf\n",(double)A[][pos[i]]);
return ;
}

[BZOJ1444]有趣的游戏(AC自动机+矩阵乘法)的更多相关文章

  1. 【bzoj1444】[Jsoi2009]有趣的游戏 AC自动机+矩阵乘法

    题目描述 输入 注意 是0<=P 输出 样例输入 样例输出 题解 AC自动机+矩阵乘法 先将所有字符串放到AC自动机中,求出Trie图. 然后构建邻接矩阵:如果x不是某个字符串的末位置,则x连向 ...

  2. BZOJ1444:[JSOI2009]有趣的游戏(AC自动机,矩阵乘法)

    Description Input 注意 是0<=P, n , l, m≤ 10. Output Sample Input input 1 3 2 2 1 2 1 2 AB BA AA inpu ...

  3. [日常摸鱼]bzoj1444 [JSOI2009]有趣的游戏——AC自动机+矩阵

    今天学校跳蚤市场摆摊聚众吸毒打call,东西卖了一百多好开心_(:з」∠)_ (然后大家中午就去吃了一顿好的x) 下午听演讲然后现在来填坑orz(其实是昨晚的坑) 题目:bzoj1444 先用字符串构 ...

  4. BZOJ 1444 有趣的游戏(AC自动机+矩阵快速幂)

    真的是很有趣的游戏... 对每个单词构建好AC自动机后,由于单词都是相同长度的且不同,所以不会出现互相为子串的形式. 那么我们对AC自动机上的节点构建转移矩阵.对于每个单词末尾的节点.该节点的出边仅仅 ...

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

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

  6. BZOJ 1444 [JSOI2009]有趣的游戏 (AC自动机、概率与期望DP、矩阵乘法)

    诶这题洛谷居然没有??? 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1444 题解: 我见到主要有三种做法. 一是矩阵乘法.设\(d ...

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

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

  8. [BZOJ 1009] [HNOI2008] GT考试 【AC自动机 + 矩阵乘法优化DP】

    题目链接:BZOJ - 1009 题目分析 题目要求求出不包含给定字符串的长度为 n 的字符串的数量. 既然这样,应该就是 KMP + DP ,用 f[i][j] 表示长度为 i ,匹配到模式串第 j ...

  9. 【POJ2778】AC自动机+矩阵乘法

    DNA Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14758 Accepted: 5716 Descrip ...

随机推荐

  1. 最短路之spfa系列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t ...

  2. deepin安装metasploit

    [1]安装metasploit 1.curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/tem ...

  3. Python自动化运维 - Django(三)CSRF - Cookie&Session

    CSRF跨站请求伪造 CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求 ...

  4. linux子系统的初始化_subsys_initcall()【转】

    转自:http://my.oschina.net/u/572632/blog/305492 目录[-] 概述 section的声明 注册 调用 IN BUILDING 概述 内核选项的解析完成之后,各 ...

  5. linux dpm机制分析(下)【转】

    转自:http://blog.csdn.net/lixiaojie1012/article/details/23707901 1      设备注册到dpm_list路径 (Platform_devi ...

  6. Deep Learning基础--线性解码器、卷积、池化

    本文主要是学习下Linear Decoder已经在大图片中经常采用的技术convolution和pooling,分别参考网页http://deeplearning.stanford.edu/wiki/ ...

  7. springboot基础知识学习

    一.springboot中常用的注解: 原文链接:http://blog.csdn.net/lafengwnagzi/article/details/53034369 原文链接:http://www. ...

  8. springmvc3 拦截器,过滤ajax请求,判断用户登录,拦截规则设置

    web.xml设置:(/拦截所有请求) <servlet> <servlet-name>dispatcher</servlet-name> <servlet- ...

  9. 共享变量 static

    一个类,有static变量counter,所有类实例共享 如果多个类实例,通过多线程访问static变量,就会产生覆盖的情况. 会发现counter偏小. 解决方法: AtomicLong count ...

  10. 176. Second Highest Salary

    Write a SQL query to get the second highest salary from the Employee table. +----+--------+ | Id | S ...