建立AC自动机,并求出转移矩阵。

再用$\sum E(终止节点)=1$去替换第一个方程,高斯消元即可。

时间复杂度$O(n^3l^3)$。

注意精度问题,要特判0.00的情况。

#include<cstdio>
#include<cmath>
#include<algorithm>
#define N 110
using namespace std;
int n,l,S,i,j,k,tot,son[N][10],v[N],fail[N],q[N],fin[N];
char s[N];double t,p[N],a[N][N],ans[N];
int ins(){
scanf("%s",s);
for(int x=0,i=0,w;i<l;i++){
if(!son[x][w=s[i]-'A'])son[x][w]=++tot;x=son[x][w];
if(i==l-1)return v[x]=1,x;
}
}
void make(){
int h=1,t=0,i,j,x;fail[0]=-1;
for(i=0;i<S;i++)if(son[0][i])q[++t]=son[0][i];
while(h<=t)for(x=q[h++],i=0;i<S;i++)if(son[x][i])fail[q[++t]=son[x][i]]=son[fail[x]][i];else son[x][i]=son[fail[x]][i];
}
int main(){
scanf("%d%d%d",&n,&l,&S);
for(i=0;i<S;i++)scanf("%lf%lf",&p[i],&t),p[i]/=t;
for(i=0;i<n;i++)fin[i]=ins();
make();
for(i=0;i<=tot;i++)a[i+1][i+1]=-1;
for(i=0;i<=tot;i++)if(!v[i])for(j=0;j<S;j++)a[son[i][j]+1][i+1]+=p[j];
for(a[1][tot+2]=1,i=0;i<=tot;i++)if(v[i])a[1][i+1]=1;else a[1][i+1]=0;
for(tot++,i=1;i<=tot;i++){
for(k=i,j=i+1;j<=tot;j++)if(fabs(a[j][i])>fabs(a[k][i]))k=j;
if(k!=i)for(j=i;j<=tot+1;j++)swap(a[i][j],a[k][j]);
for(j=i+1;j<=tot;j++)for(t=a[j][i]/a[i][i],k=i;k<=tot+1;k++)a[j][k]-=a[i][k]*t;
}
for(ans[tot]=a[tot][tot+1]/a[tot][tot],i=tot-1;i;i--){
for(ans[i]=a[i][tot+1],j=tot;j>i;j--)ans[i]-=ans[j]*a[i][j];
ans[i]/=a[i][i];
}
for(i=0;i<n;i++)if(ans[fin[i]+1]>0)printf("%.2f\n",ans[fin[i]+1]);else puts("0.00");
return 0;
}

  

BZOJ1444 : [Jsoi2009]有趣的游戏的更多相关文章

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

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

  2. bzoj1444[Jsoi2009]有趣的游戏[AC自动机]

    题面 bzoj 我要向师父学习善待每一只数据结构 考虑成环,那么高斯消元 然鹅这道题太小了 所以直接转移矩阵自乘就好啦 终点不向外连边 有一条向自己的,概率为一的自环来作为结尾 对于其他店 若有边\( ...

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

    题目描述 输入 注意 是0<=P, n , l, m≤ 10. 输出 样例输入 input 1 3 2 2 1 2 1 2 AB BA AA input 2 3 4 2 1 2 1 2 AABA ...

  4. 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 ...

  5. BZOJ1444: [Jsoi2009]有趣的游戏(Trie图,矩乘)

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

  6. 【BZOJ1444】[JSOI2009]有趣的游戏(高斯消元,AC自动机)

    [BZOJ1444][JSOI2009]有趣的游戏(高斯消元,AC自动机) 题面 BZOJ 题解 先把\(AC\)自动机构建出来,最好构成\(Trie\)图.然后这样子显然是在一个有向图中有一堆概率的 ...

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

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

  8. 【bzoj1444】[Jsoi2009]有趣的游戏

    1444: [Jsoi2009]有趣的游戏 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1007  Solved: 334[Submit][Statu ...

  9. BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)

    1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...

随机推荐

  1. win7+ubuntu双系统中卸载ubuntu方法

    双系统中,如果要卸载ubuntu是不能够直接卸载的,需要使用一些特殊的方法.下面就为大家详细的介绍介绍. Step1 MBR引导区修复: 进入win7,下载个软件MbrFix,放在C:\windows ...

  2. poj1611(感染病患者)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 24587   Accepted: 12046 De ...

  3. Linux 在 i 节点表中的磁盘地址表中,若一个文件的长度是从磁盘地址表的第 1 块到第 11 块 解析?

    面试题: 在 i 节点表中的磁盘地址表中,若一个文件的长度是从磁盘地址表的第 1 块到第 11块,则该文件共占有 B  块号.A 256 B 266 C 11 D 256×10 linux文件系统是L ...

  4. LVS-三种负载均衡方式比较

    1.什么是LVS? 首 先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和 基于内容请求分发技术.调度器具 ...

  5. 《ASP.NET MVC4 WEB编程》学习笔记------ViewBag、ViewData和TempData的使用和区别

    本文转自大卫Baby ViewBag和ViewData其实是互通的ViewBag和ViewData的区别:ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动 ...

  6. Enum:Backward Digit Sums(POJ 3187)

    反过来推 题目大意:就是农夫和这只牛又杠上了(怎么老是牛啊,能换点花样吗),给出一行数(从1到N),按杨辉三角的形式叠加到最后,可以得到一个数,现在反过来问你,如果我给你这个数,你找出一开始的序列(可 ...

  7. ubuntu命令行相关命令使用心得

    一.Ubuntu解压缩zip,tar,tar.gz,tar.bz2 ZIP zip可能是目前使用得最多的文档压缩格式.它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac ...

  8. 解决 jersey javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)

    检查是否Jar冲突 保留一个jersey-server-*.jar

  9. php 基础语法

    <?php //注释 /* 多行注释 */ //输出语句 //echo "hello","helloa"; //print "world&quo ...

  10. linux Xtrabackup安装及使用方法

    [root@centos01 ~]# rpm -Uvh http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x ...