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

题面

BZOJ

题解

先把\(AC\)自动机构建出来,最好构成\(Trie\)图。然后这样子显然是在一个有向图中有一堆概率的转移,并且存在环,所以高斯消元解决。

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct Node{int son[26],fail,lst;}t[500];
int tot,n,m,l,pos[20];
char ch[50];
double g[200][200],p[50];
void insert(char *s,int id)
{
int u=0;
for(int i=1;i<=l;++i)
{
if(!t[u].son[s[i]-65])
t[u].son[s[i]-65]=++tot;
u=t[u].son[s[i]-65];
}
t[u].lst=id;pos[id]=u;
}
void Build()
{
queue<int> Q;
for(int i=0;i<m;++i)if(t[0].son[i])Q.push(t[0].son[i]);
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=0;i<m;++i)
if(t[u].son[i])
t[t[u].son[i]].fail=t[t[u].fail].son[i],Q.push(t[u].son[i]);
else t[u].son[i]=t[t[u].fail].son[i];
t[u].lst|=t[t[u].fail].lst;
}
}
void Gauss()
{
for(int i=0;i<=tot;++i)
{
int p=0;
for(int j=i;j<=tot;++j)
if(g[j][i]){p=j;break;}
for(int j=0;j<=tot+1;++j)swap(g[i][j],g[p][j]);
double t=g[i][i];
for(int j=0;j<=tot+1;++j)g[i][j]/=t;
for(int j=i+1;j<=tot;++j)
{
double d=g[j][i];
for(int k=0;k<=tot+1;++k)
g[j][k]-=g[i][k]*d;
}
}
for(int i=tot;~i;--i)
{
g[i][tot+1]/=g[i][i];
for(int j=i-1;j>=0;--j)
g[j][tot+1]-=g[j][i]*g[i][tot+1];
if(!g[i][tot+1])g[i][tot+1]=0;
}
}
int main()
{
scanf("%d%d%d",&n,&l,&m);
for(int i=0;i<m;++i)
{
int a,b;
scanf("%d%d",&a,&b);
p[i]=1.0*a/b;
}
for(int i=1;i<=n;++i)
{
scanf("%s",ch+1);
insert(ch,i);
}
Build();
for(int i=0;i<=tot;++i)
for(int j=0;j<m;++j)
if(!t[i].lst)
g[t[i].son[j]][i]+=p[j];
for(int i=0;i<=tot;++i)g[i][i]-=1;
for(int i=0;i<=tot;++i)if(t[i].lst)g[0][i]=1;else g[0][i]=0;g[0][tot+1]=1;
Gauss();
for(int i=1;i<=n;++i)printf("%.2lf\n",g[pos[i]][tot+1]);
return 0;
}

【BZOJ1444】[JSOI2009]有趣的游戏(高斯消元,AC自动机)的更多相关文章

  1. [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)

    [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...

  2. [Sdoi2017]硬币游戏 [高斯消元 KMP]

    [Sdoi2017]硬币游戏 题意:硬币序列,H T等概率出现,\(n \le 300\)个人猜了一个长为$ m \le 300$的字符串,出现即获胜游戏结束.求每个人获胜概率 考场用了[1444: ...

  3. 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基

    题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...

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

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

  5. BZOJ 3105: [cqoi2013]新Nim游戏 [高斯消元XOR 线性基]

    以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高 ...

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

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

  7. [BZOJ4820][SDOI2017]硬币游戏(高斯消元+KMP)

    比较神的一道题,正解比较难以理解. 首先不难得出一个(nm)^3的算法,对所有串建AC自动机,将在每个点停止的概率作为未知数做高斯消元即可. 可以证明,AC自动机上所有不是模式串终止节点的点可以看成一 ...

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

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

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

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

随机推荐

  1. odoo 打印单

    <td style="word-wrap:break-word;width:20%;font-size:16"> <t t-foreach="l.pro ...

  2. 深入理解JavaScript系列(23):JavaScript与DOM(上)——也适用于新手

    文档对象模型Document Object Model DOM(Document Object Model,文档对象模型)是一个通过和JavaScript进行内容交互的API. Javascript和 ...

  3. Linux内核RPC请求过程

    这篇文章讲讲server端RPC报文的处理流程.server端RPC报文的处理函数是svc_process,这个函数位于net/sunrpc/svc.c中.这个函数须要一个svc_rqst结构的指针作 ...

  4. Transaction Check Error:file /usr/libexec/getconf/default conflicts between attempted installs of gcc-6.4.1-1.fc25.i686 and gcc-6.4.1-1.fc25.x86_64

    今天在我的ubuntu系统上使用yum来安装软件时出错了错误:Transaction Check Error:file /usr/libexec/getconf/default conflicts b ...

  5. WPF bind baidu Image

     as there baidu image has protect refer from other site to use. need download i use request header a ...

  6. Android开发——RecyclerView特性以及基本使用方法(二)

    0.  前言 随着Android的发展,虽然ListView依旧重要,但RecyclerView确实越来越多的被大家使用.但显然并不能说RecyclerView就一定优于ListView,而是应该根据 ...

  7. mysql提示Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist解决方法

    一次重启mysql发现无法启动成功,通过检查mysql日志发现问题并解决了问题. mysql启动失败的日志: [root@nn ~]# tail -n 20 /var/log/mysqld.log 1 ...

  8. HTML基础之JS

    HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...

  9. 微信小程序之可滚动视图容器组件 scroll-view

    1. 纵向滚动 scroll-y 当 设置为scroll-y 时, 需要将其高度设为固定值 如果整个页面,即最外层标签为scroll-view,需要并将其高度设为100%,也需要将page设为100% ...

  10. Docker GitHub 网站中 Readme.md 以技术者的角度翻译

    Docker 是一个开源的轻量级容器项目,用于让你的应用在它上面打包.集装和运行.Docker 运行的环境既包含未知硬件也包含未知操作系统.这句话的意思是它可以运行在任何地方,小到你的笔记本大到一个大 ...