【BZOJ1444】[JSOI2009]有趣的游戏(高斯消元,AC自动机)
【BZOJ1444】[JSOI2009]有趣的游戏(高斯消元,AC自动机)
题面
题解
先把\(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自动机)的更多相关文章
- [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)
[BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...
- [Sdoi2017]硬币游戏 [高斯消元 KMP]
[Sdoi2017]硬币游戏 题意:硬币序列,H T等概率出现,\(n \le 300\)个人猜了一个长为$ m \le 300$的字符串,出现即获胜游戏结束.求每个人获胜概率 考场用了[1444: ...
- 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基
题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...
- BZOJ1444 : [Jsoi2009]有趣的游戏
建立AC自动机,并求出转移矩阵. 再用$\sum E(终止节点)=1$去替换第一个方程,高斯消元即可. 时间复杂度$O(n^3l^3)$. 注意精度问题,要特判0.00的情况. #include< ...
- BZOJ 3105: [cqoi2013]新Nim游戏 [高斯消元XOR 线性基]
以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高 ...
- bzoj1444[Jsoi2009]有趣的游戏[AC自动机]
题面 bzoj 我要向师父学习善待每一只数据结构 考虑成环,那么高斯消元 然鹅这道题太小了 所以直接转移矩阵自乘就好啦 终点不向外连边 有一条向自己的,概率为一的自环来作为结尾 对于其他店 若有边\( ...
- [BZOJ4820][SDOI2017]硬币游戏(高斯消元+KMP)
比较神的一道题,正解比较难以理解. 首先不难得出一个(nm)^3的算法,对所有串建AC自动机,将在每个点停止的概率作为未知数做高斯消元即可. 可以证明,AC自动机上所有不是模式串终止节点的点可以看成一 ...
- [日常摸鱼]bzoj1444 [JSOI2009]有趣的游戏——AC自动机+矩阵
今天学校跳蚤市场摆摊聚众吸毒打call,东西卖了一百多好开心_(:з」∠)_ (然后大家中午就去吃了一顿好的x) 下午听演讲然后现在来填坑orz(其实是昨晚的坑) 题目:bzoj1444 先用字符串构 ...
- 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 ...
- 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 ...
随机推荐
- Apache服务器笔记
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性.被广泛使用,是最流行的Web服务 ...
- Spring Data JPA、MyBatis还有Hibernate有什么区别
原文:https://www.imooc.com/article/19754?block_id=tuijian_wz Spring Data JPA.MyBatis还有Hibernate有什么区别 2 ...
- 大数据入门第十六天——流式计算之storm详解(一)入门与集群安装
一.概述 今天起就正式进入了流式计算.这里先解释一下流式计算的概念 离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据 ...
- Django Rest Framework源码剖析(二)-----权限
一.简介 在上一篇博客中已经介绍了django rest framework 对于认证的源码流程,以及实现过程,当用户经过认证之后下一步就是涉及到权限的问题.比如订单的业务只能VIP才能查看,所以这时 ...
- 20155210 EXP6 信息搜集与漏洞扫描
20155210 EXP6 信息搜集与漏洞扫描 信息搜集 外围信息搜集 通过DNS和IP挖掘目标网站的信息 whois 域名注册信息查询 我们通过输入whois qq.com可查询到3R注册信息,包括 ...
- 20155233 Exp1 PC平台逆向破解(5)M
Exp1 PC平台逆向破解(5)M 实践一 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 步骤 1.cp pwn1 pwn20155233拷贝pwn1文件,命名为pwn201 ...
- 20155334 《网络攻防》 Exp6 信息搜集与漏洞扫描
20155334 Exp6 信息搜集与漏洞扫描 一.实验问题回答 哪些组织负责DNS,IP的管理? 答:互联网名称与数字地址分配机构 ICANN ,该机构决定了域名和IP地址的分配.负责协调管理DNS ...
- Ubuntu中程序部署时无法加载动态库的解决方法
Ubuntu下修改环境变量的三种方法 添加环境变量无法解决,可尝试如下操作: sudo vim /etc/ld.so.conf 在ld.so.conf中加入动态库的目录... 然后 sudo ldco ...
- 双面间谍(spy)
双面间谍 链接 分析: 戳这 代码: #include<cstdio> #include<algorithm> #include<cstdio> #include& ...
- elasticsearch同步mongodb--mongo connector的使用
部署准备 python-3.6.4-amd64.exe mongodb-win32-x86_64-3.4.6-signed.msi (如果已经安装可以忽略) 注意点! 之前我写的一篇文章用的是ela ...