BZOJ1444 : [Jsoi2009]有趣的游戏
建立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]有趣的游戏的更多相关文章
- [日常摸鱼]bzoj1444 [JSOI2009]有趣的游戏——AC自动机+矩阵
今天学校跳蚤市场摆摊聚众吸毒打call,东西卖了一百多好开心_(:з」∠)_ (然后大家中午就去吃了一顿好的x) 下午听演讲然后现在来填坑orz(其实是昨晚的坑) 题目:bzoj1444 先用字符串构 ...
- bzoj1444[Jsoi2009]有趣的游戏[AC自动机]
题面 bzoj 我要向师父学习善待每一只数据结构 考虑成环,那么高斯消元 然鹅这道题太小了 所以直接转移矩阵自乘就好啦 终点不向外连边 有一条向自己的,概率为一的自环来作为结尾 对于其他店 若有边\( ...
- 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 ...
- 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 ...
- 【BZOJ1444】[JSOI2009]有趣的游戏(高斯消元,AC自动机)
[BZOJ1444][JSOI2009]有趣的游戏(高斯消元,AC自动机) 题面 BZOJ 题解 先把\(AC\)自动机构建出来,最好构成\(Trie\)图.然后这样子显然是在一个有向图中有一堆概率的 ...
- 【BZOJ1444】[Jsoi2009]有趣的游戏 AC自动机+概率DP+矩阵乘法
[BZOJ1444][Jsoi2009]有趣的游戏 Description Input 注意 是0<=P Output Sample Input Sample Output HINT 30%的 ...
- 【bzoj1444】[Jsoi2009]有趣的游戏
1444: [Jsoi2009]有趣的游戏 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1007 Solved: 334[Submit][Statu ...
- BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...
随机推荐
- 第14章 使用DHCP动态管理主机地址
章节简述: DHCP协议服务能够自动化的管理局域网内的主机IP地址,有效的提升IP地址使用率,提高配置效率,减少管理与维护成本. 学习dhcpd服务程序的使用方法并逐条讲解配置参数,完整演示自动化分配 ...
- Capistrano SSH::AuthenticationFailed, not prompting for password
文章是从我的个人博客上粘贴过来的, 大家也可以访问 www.iwangzheng.com 在本地执行cap deploy部署的时候会报错: connection failed for: 11.11.1 ...
- Lucas的数论题解
Lucas的数论 reference 题目在这里> < Pre 数论分块 默认向下取整时. 形如\(\sum\limits_{i=1}^n f\left( \frac{n}{i}\righ ...
- ldd查询命令或软件共享的函数库(动态)
<1> ldd - print shared library dependencies SYNOPSIS ldd [OPTION]... FILE... DESCRIPTION ldd p ...
- 【Python】django多对多 查询 ,反查等操作
The Django Book中这样写 但我使用属性名后加_set会报错 而直接用members = group.user_group_join.all() 就可以 可能因为我的MyUser类里有两个 ...
- First Position of Target
For a given sorted array (ascending order) and a target number, find the first index of this number ...
- jquery优势
1.轻量 2.开源 3.选择器出色 可以支持几乎 css1到css3 的所有选择器 4.简单的修改页面 不同的浏览器对于css的支持程度是不同的,jquery通过封装javascript的代码, ...
- Python多线程(1)——介绍
Python对多线程提供了很好的支持,Python中多线程相关的模块包括:thread,threading,Queue.可以方便地支持创建线程.互斥锁.信号量.同步等特性. 1. thread:多线程 ...
- 【JAVA、C++】LeetCode 019 Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- fcitx-sogoupinyin下载地址和安装
伴随着Deepin 12.12 beta的发布,搜狗输入法也与我们见面了.在发布前几日Deepiner也通过各种途径向我们展示了搜狗Linux输入法,当然也掉足了胃口. 来自官方的截图: 当然令很多U ...