有环的概率是可以高斯消元的

由于匹配情况可能从一个串转移到另一个串,所以需要建一个转移关系的图

就可以建一个ac自动机,但节点数是nm的。就可以设未知数,然后凑一些方程。

设N表示没有任何人获胜的概率(允许有前缀)

然后N+ A串/B串/...n串  一定会停止。

一定会停止的情况只有N  +  n种串。

若 A=HTH  B=THT

N  + HTH   =   (...A + TH )  +    (...A)   +  (...B+H)

最后A+B=1;

然后直接解方程,注意高斯消元需要把每一项最大的放在上面,最大值形成大三角,不然会被卡精度。。

码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define eps 0.0000000000001
int n,i,j,l,m,k,sp[505];
long double f[505][505],t,ans[505],er[505];
char ch[505][505];
void gauss()
{int i,j,k;for(i=1;i<=n;i++)//枚举方程{for(j=i;j<=n;j++)if(fabs(f[j][i])>fabs(f[i][i]))for(k=1;k<=n+1;k++) swap(f[i][k],f[j][k]); t=f[i][i];for(j=1;j<=n+1;j++)f[i][j]/=t;for(j=1;j<=n;j++){  if(j==i)continue; t=f[j][i];for(l=1;l<=n+1;l++)f[j][l]-=f[i][l]*t;      }}
}
int main()
{scanf("%d%d",&n,&m);er[0]=1;for(i=1;i<=m;i++){er[i]=er[i-1]/2;      }for(i=1;i<=n;i++){for(j=1;j<=m;j++){do{scanf("%c",&ch[i][j]);} while(ch[i][j]!='H'&&ch[i][j]!='T');}}for(i=1;i<=n;i++){k=0;for(j=2;j<=m;j++)//适配 {while(ch[i][k+1]!=ch[i][j]&&k!=0)k=sp[k];if(ch[i][k+1]==ch[i][j])k++;sp[j]=k;}for(j=1;j<=n;j++){l=0;for(k=1;k<=m;k++){while(ch[i][l+1]!=ch[j][k]&&l!=0)l=sp[l];if(ch[i][l+1]==ch[j][k])l++;           }while(l){f[i][j]+=er[m-l];l=sp[l];}f[i][n+1]=-er[m];}}for(i=1;i<=n;i++)f[n+1][i]=1;f[n+1][n+2]=1;n++;gauss();for(i=1;i<=n; i++){for(j=1;j<=n;j++){if(f[i][j]-eps>0||f[i][j]+eps<0)ans[j]=f[i][n+1];          }       }for(i=1;i<=n-1;i++){printf("%.10lf\n",double(ans[i]));}} 

bzoj4820 [Sdoi2017]硬币游戏 高斯消元+概率+kmp相关推荐

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

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

  2. [高斯消元 概率 KMP] BZOJ 4820 [Sdoi2017]硬币游戏

    一个直观的想法 是建AC自动机 然后消元 但是这样变量个数是O(nm)O(nm) 然后我就不会做了 概率题都好妙啊 一个精妙的设计是再定义一个状态N 表示当前串不包含任何人的概率 举个例子 来自这里 ...

  3. BZOJ4820 [SDOI2017]硬币游戏

    BZOJ4820 [SDOI2017]硬币游戏 题面:BZOJ 解析 考虑把所有没有到达结束状态的字符串看做一类字符串\(N\),把以字符串\(i\)作为结束的一类字符串\(i\).现在假设猜测了两个 ...

  4. bzoj4820[SDOI2017]硬币游戏

    题意 给出n个长度均为m的不同01串,随机生成一个无限长的01串,对n个01串中的每个,求出它最先在随机串中出现的概率. 分析 写这个题的题解比写这个题还难...我可能学了假的概率DP...假装我理解 ...

  5. BZOJ 1778: [Usaco2010 Hol]Dotp 驱逐猪猡 [高斯消元 概率DP]

    1778: [Usaco2010 Hol]Dotp 驱逐猪猡 题意:一个炸弹从1出发p/q的概率爆炸,否则等概率走向相邻的点.求在每个点爆炸的概率 高斯消元求不爆炸到达每个点的概率,然后在一个点爆炸就 ...

  6. bzoj1778 驱逐猪猡 [高斯消元+概率DP]

    Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N一共N个猪城.这些城市由M条由两个不同端点AjA_j和BjB_j (1≤Aj≤N;1≤Bj≤N)(1 \le A ...

  7. BZOJ 2466 中山市选2009 树 高斯消元+暴力

    题目大意:树上拉灯游戏 高斯消元解异或方程组,对于全部的自由元暴力2^n枚举状态,代入计算 这做法真是一点也不优雅... #include <cstdio> #include <cs ...

  8. 【BZOJ4820】[SDOI2017]硬币游戏(高斯消元)

    [BZOJ4820][SDOI2017]硬币游戏(高斯消元) 题面 BZOJ 洛谷 题解 第一眼的感觉就是构\(AC\)自动机之后直接高斯消元算概率,这样子似乎就是\(BZOJ1444\)了.然而点数 ...

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

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

最新文章

  1. html em px的不同,CSS:区别 px、em、rem
  2. Windows核心编程 第十八章 堆栈
  3. 表的插入、更新、删除、合并操作_13_通过表关联更新多个字段
  4. python字符串基本操作-Python 基本字符串操作
  5. SpringBoot项目启动时提示程序包不存在和找不到符号
  6. 【2016年第2期】大数据背景下的治理现代化:何以可能与何以可为(下)
  7. urllib2:URLError与HTTPError
  8. Flutter ImageFilter 高斯模糊效果 BackdropFilter 实现过滤效果
  9. 使用正态分布变换(Normal Distributions Transform)进行点云配准
  10. 我国自主开发的编程语言“木兰”是又一个披着“洋”皮的红芯浏览器吗?
  11. python-requests数据驱动延伸
  12. 浙大计算机基础知识2,[精选资料]14年浙大远程计算机基础2Windows知识题高起专 作业题2答案...
  13. CAD二次开发C#——动态绘制矩形(DrawJig)
  14. idea导入myeclipse项目以后报错,配置文件灰色以及 com.alipay.demo.trade.Main test_trade_precreate 严重: 系统异常,预下单状态未知
  15. user后面的计算机名更改,更改电脑用户名(可更改C:\Users\用户名)
  16. 蒟蒻的控制台贪吃蛇(新手实验)
  17. DFM文件以及写该文章的原因等等
  18. 为什么我们要减肥?科学家证实肥胖或可导致癌细胞肿瘤生长
  19. oracle 结果集已耗尽_java.sql.SQLException: 结果集已耗尽,该怎么解决
  20. DSP广告精准投放平台如何快速提升品牌知名度

热门文章

  1. MATLAB矩阵的分解与变换
  2. mysql 5.7 导入出错_mysql5.x数据库文件导入mysql5.7数据库出错解决方法
  3. 联想小新pro无法人脸识别自动开机的解决方法
  4. Chromium版Edge体验——几个理由告诉你为什么卸载Chrome!
  5. Ubuntu18.04系统快速下载Github代码
  6. 鲨鱼 抓包 oracle,抓包工具wireshark的操作使用
  7. Java判断一个数是不是素数
  8. Node编码格式的设置
  9. mysql scrapy 重复数据_scrapy关于将数据保存进mysql数据库及问题解决(增删查改)
  10. matlab std函数_如何利用Matlab进行小波分析