有点神,按照1444的做法肯定会挂

注意到它的概率是相同的,所以可以简化状态

详见http://www.cnblogs.com/candy99/p/6701221.html

https://www.cnblogs.com/liu-runda/p/6919077.html

总之就是靠在kmp中的ne数组上跳来找到对当前串概率有影响的串然后把概率加起来……

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=305;
int n,m,ne[N][N];
double a[N][N],p[N];
char c[N][N];
void gtne(char s[],int ne[])
{
for(int i=2,j=0;i<=m;i++)
{
while(j&&s[j+1]!=s[i])
j=ne[j];
if(s[j+1]==s[i])
j++;
ne[i]=j;
}
}
void gaosi(int n)
{
for(int i=1;i<=n;i++)
{
int nw=i;
for(int j=i+1;j<=n;j++)
if(fabs(a[j][i])>fabs(a[nw][i]))
nw=j;
for(int j=i;j<=n+1;j++)
swap(a[i][j],a[nw][j]);
for(int j=i+1;j<=n+1;j++)
a[i][j]/=a[i][i];
a[i][i]=1;
for(int j=i+1;j<=n;j++)
{
for(int k=i+1;k<=n+1;k++)
a[j][k]-=a[j][i]*a[i][k];
a[j][i]=0;
}
}
for(int i=n-1;i>=1;i--)
{
for(int j=i+1;j<=n;j++)
a[i][n+1]-=a[j][n+1]*a[i][j];
a[i][n+1]/=a[i][i];
}
}
int main()
{
scanf("%d%d",&n,&m);
p[0]=1;
for(int i=1;i<=m;i++)
p[i]=p[i-1]/2;
for(int i=1;i<=n;i++)
scanf("%s",c[i]+1),a[i][n+1]=-p[m],a[n+1][i]=1;
a[n+1][n+2]=1;
for(int i=1;i<=n;i++)
gtne(c[i],ne[i]);
for(int y=1;y<=n;y++)
for(int x=1;x<=n;x++)
{
int j=0;
for(int i=1;i<=m;++i)
{
while(j&&c[y][j+1]!=c[x][i])
j=ne[y][j];
if(c[y][j+1]==c[x][i])
j++;
}
while(j)
a[y][x]+=p[m-j],j=ne[y][j];
}
gaosi(n+1);
for(int i=1;i<=n;i++)
printf("%.10f\n",a[i][n+2]);
return 0;
}

bzoj 4820: [Sdoi2017]硬币游戏【kmp+高斯消元】的更多相关文章

  1. BZOJ.4820.[SDOI2017]硬币游戏(思路 高斯消元 哈希/AC自动机/KMP)

    BZOJ 洛谷 建出AC自动机,每个点向两个儿子连边,可以得到一张有向图.参照 [SDOI2012]走迷宫 可以得到一个\(Tarjan\)+高斯消元的\(O((nm)^3)\)的做法.(理论有\(6 ...

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

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

  3. [BZOJ4820]硬币游戏 KMP+高斯消元

    4820: [Sdoi2017]硬币游戏 Time Limit: 10 Sec  Memory Limit: 128 MB Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的 ...

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

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

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

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

  6. BZOJ 4820 [Sdoi2017]硬币游戏 ——期望DP 高斯消元

    做法太神了,理解不了. 自己想到的是建出AC自动机然后建出矩阵然后求逆计算,感觉可以过$40%$ 用一个状态$N$表示任意一个位置没有匹配成功的概率和. 每种匹配不成功的情况都是等价的. 然后我们强制 ...

  7. P3706-[SDOI2017]硬币游戏【高斯消元,字符串hash】

    正题 题目链接:https://www.luogu.com.cn/problem/P3706 题目大意 给出 \(n\) 个长度为 \(m\) 的 \(H/T\) 串. 开始一个空序列,每次随机在后面 ...

  8. BZOJ 4820 [SDOI2017] 硬币游戏

    Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了.同学们觉得要加强趣味性,所以要找 ...

  9. 4820: [Sdoi2017]硬币游戏

    4820: [Sdoi2017]硬币游戏 链接 分析: 期望dp+高斯消元. 首先可以建出AC自动机,Xi表示经过节点i的期望次数,然后高斯消元,这样点的个数太多,复杂度太大.但是AC自动机上末尾节点 ...

随机推荐

  1. MySQL性能优化的21个最佳实践 和 mysql使用索引【转载】

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  2. php 以单下划线或双下划线开头的命名

    有2个下划线的是魔术方法,如:__construct.__destruct等等.有1个下划线的一般是私有方法,如 _initialize. 小测试: public function _test(){ ...

  3. win8,win10里面内置的IE浏览器网银无法输入密码

    win8,win10里面内置的IE浏览器网银无法输入密码,安装控件也没效果,部分网银直接导致IE崩溃,只需要简单设置即可解决. 方法/步骤   1 打开IE浏览器,点击右上角的小齿轮图标,在下拉菜单中 ...

  4. Win7查看本地是否安装JDK及安装路径的方法

    工具/原料   win7 方法/步骤   1 开始->点击运行,输入:cmd 2 然后在命令提示符中,输入:java -version  假如看到有版本提示那么安装成功 3 假如忘记了java ...

  5. SQLAlchemy的group_by和order_by的区别

    1.官网解释: group_by(*criterion) apply one or more GROUP BY criterion to the query and return the newly ...

  6. 基于Hexo + Git + Nginx的博客发布

    进过上一篇<树莓派搭建私人服务器>,我们已经有一个私人服务器了,现在需要做点什么实际事情了,先搭一个博客分享自己的经验吧. 相关文章:1.<树莓派搭建私人服务器>(http:/ ...

  7. Ubuntu系统U盘安装以及降内核

    由于项目需要,要用U盘制作一个Linux系统,支持EFI启动,并且内核版本要求是2.6.35.6.所以在选系统的时候,就必须要选安装文件里面带有EF I目录,并且该目录下面有BOOTx64.EFI和g ...

  8. 【转】apache storm 内置的定时机制

    原文:http://www.cnblogs.com/kqdongnanf/p/4778672.html ------------------------------------------------ ...

  9. 【问题记录】LoadRunner 接口压测-json格式报文

    [问题起因] 前段时间,协助其他项目录制接口压测脚本,对方要求请求报文内容实现参数化. 请求方法如下: 直接在Parameter List中新增一个parameter, 将请求报文放入dat文件中.这 ...

  10. Android学习 多读官网,故意健康---手势

    官网地址 ttp://developer.android.com/training/gestures/detector.html: 一.能够直接覆盖Activity的onTouch方法 public ...