1444: [Jsoi2009]有趣的游戏

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 1007  Solved: 334
[Submit][Status][Discuss]

Description

Input

注意 是0<=P

Output

Sample Input

Sample Output

 
 
 
 
【题解】
 
AC自动机+矩阵乘法
 
首先把模式串建成AC自动机,构建出转移矩阵。
 
构造方法:a[i][j]表示从第i个结点转移到第j个结点的概率,则如果j被标记过,f[i][j]=1,否则f[i][j]=possble[ch[j]]
 
具体见代码:
 
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 510
struct node{double p[MAXN][MAXN]; node(){memset(p,,sizeof(p));}}a;
int n,l,m,cnt,id,fail[MAXN],end[MAXN],pos[MAXN],q[MAXN],tr[MAXN][];
double chty[MAXN];
char ch[MAXN];
inline int read()
{
int x=,f=; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getchar();}
while(isdigit(ch)) {x=x*+ch-''; ch=getchar();}
return x*f;
}
void insert()
{
int now=;
for(int i=;i<=l;i++)
{
if(!tr[now][ch[i]-'A']) tr[now][ch[i]-'A']=++cnt;
now=tr[now][ch[i]-'A'];
}
end[now]=; pos[++id]=now;
}
void build()
{
int head=,tail=;
for(int i=;i<m;i++) if(tr[][i]) q[++tail]=tr[][i];
while(++head<=tail)
{
int x=q[head]; end[x]|=end[fail[x]];
for(int i=;i<m;i++)
{
if(!tr[x][i]) tr[x][i]=tr[fail[x]][i];
else {fail[tr[x][i]]=tr[fail[x]][i]; q[++tail]=tr[x][i];}
}
}
}
void get()
{
for(int i=;i<=cnt;i++)
{
if(end[i]) a.p[i][i]=;
else for(int x=;x<m;x++) a.p[i][tr[i][x]]+=chty[x];
}
}
inline node operator *(node &x,node &y)
{
node z;
for(int i=;i<=cnt;i++)
for(int j=;j<=cnt;j++)
for(int k=;k<=cnt;k++)
z.p[i][j]+=x.p[i][k]*y.p[k][j];
return z;
}
int main()
{
//freopen("cin.in","r",stdin);
//freopen("cout.out","w",stdout);
n=read(); l=read(); m=read();
for(int i=;i<m;i++) chty[i]=(double)read()/read();
for(int i=;i<=n;i++) {scanf("%s",ch+); insert();}
build();
get();
for(int i=;i<=;i++) a=a*a;
for(int i=;i<=n;i++) printf("%.2lf\n",(double)a.p[][pos[i]]);
return ;
}
 
 
 
 

【bzoj1444】[Jsoi2009]有趣的游戏的更多相关文章

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

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

  2. BZOJ1444 : [Jsoi2009]有趣的游戏

    建立AC自动机,并求出转移矩阵. 再用$\sum E(终止节点)=1$去替换第一个方程,高斯消元即可. 时间复杂度$O(n^3l^3)$. 注意精度问题,要特判0.00的情况. #include< ...

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 使用第三方图表工具——Chart.js

    效果: 代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  2. Beego的controller怎么用嵌入实现继承问题

    Go Lang是无继承层次的轻量级面向对象编程范式.Go Lang中的接口与实现之间完全是非侵入式的.这种接口实现方式很值得称赞.不但如此,在Go Lang中只有类型嵌入而没有类型继承.这规避了很多与 ...

  3. GoogLeNet 神经网络结构

    GoogLeNet是2014年 ILSVRC 冠军模型,top-5 错误率 6.7% ,GoogLeNet做了更大胆的网络上的尝试而不像vgg继承了lenet以及alexnet的一些框架,该模型虽然有 ...

  4. Maven根据不同的环境打包不同的配置

    前言: 在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置等等. 那么就需要借助maven提 ...

  5. 转:使用django-admin.py创建django工程

    原文:http://blog.csdn.net/a921800467b/article/details/8257352 安装Django首先需要安装数据库,可选的数据库有好几种,我选择的是MySQL数 ...

  6. 关于ORM,以及Python中SQLAlchemy的sessionmaker,scoped_session

    orm(object relational mapping):对象关系映射. python面向对象,而数据库是关系型. orm是将数据库关系映射为Python中的对象,不用直接写SQL. 缺点是性能略 ...

  7. SSM框架——整合搭建流程

    1.首先创建maven工程,使用哪种方式进行创建都可以,可以参考博主之前的文章: <两种方式创建Maven项目[方式二]><两种方式创建Maven项目[方式一]> 2.先看看搭 ...

  8. spring mvc静态资源访问的配置

    如果我们使用spring mvc来做web访问请求的控制转发,那么默认所有访问都将被DispatcherServlet独裁统治.比如我现在想访问的欢迎页index.html根本无需任何业务逻辑处理,仅 ...

  9. 根据wsdl文件生成WebService客户端代码

    有时候在项目中,一个项目可能有好几个公司在做.系统之间难免会出现互相调用接口的现象,这时候有一种办法就是使用webService.本篇文章将介绍如何将对接系统提供的WebService接口,根据对方提 ...

  10. yii2 csrf验证原理分析

    知识补充 因为yii2 csrf的验证的加解密 涉及到异或运算 所以需要先补充php里字符串异或运算的相关知识,不需要的可以跳过 ^异或运算不一样返回1 否者返回 0在PHP语言中,经常用来做加密的运 ...