题意:给定一个n*n的地图,上面有k个障碍点不能走,有一个机器人从(0,0)出发,每次等概率的不动或者往上下左右没有障碍的地方走动,问走无限步后停在图的右下部的概率

n<=1e4,k<=1e3

思路:据说是找规律

      From https://blog.csdn.net/anna__1997/article/details/78494788  牛逼的证明

   马尔科夫链的随机游走模型

  • 可建立状态转移矩阵,对n * n 的图中n * n 个点编号为0 ~[ (n - 1) * n + n – 1] 设最大编号为max
    P = p(i, j) = [p(0, 0) p(0, 1) … p(0, max)
    P(1, 0) p(1, 1) … p(1, max)

    P(max, 0) p(max, 1) … p(max, max)]
    π(i) 为i时间各点的概率
    π(n + 1) = π(n) * P
    当时间->无穷 π(n + 1)->π
    可以通过 π * P = π 计算
    验证猜测结果正确
    *******************************************************
    找规律的答案 有待证明
    现在能想到的是 整个封闭系统每个格子以出现机器人的概率作为权值 在很长的时间线上是一个熵增的
    过程(想到元胞自动机),如果要模拟这个概率扩散的过程的话,格子的权值的更新是一个用他所能到达的格子的权值
    和他自身的权值迭代的过程,这个过程中可以发现他的相邻的格子的权值是在不断同化的,因此,在无穷远后
    (0, 0)的和他周围的格子的权值不在体现优势,而更加开放的格子则更占优(可根据迭代公式理解)

    *******************************************************

    考虑每个障碍点对答案的影响,找规律后的得到只与障碍点所在的位置与周围的联通情况有关

    判格子是不是障碍可以用set

     #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<set>
    #include<queue>
    #include<vector>
    using namespace std;
    typedef long long ll;
    typedef unsigned int uint;
    typedef unsigned long long ull;
    typedef pair<int,int> PII;
    typedef vector<int> VI;
    #define fi first
    #define se second
    #define MP make_pair
    #define N 11000
    #define M 210
    #define MOD 1e9+7
    #define eps 1e-8
    #define pi acos(-1)
    int dx[]={,-,,,},dy[]={,,,-,};
    set<int>st; int read()
    {
    int v=,f=;
    char c=getchar();
    while(c<||<c) {if(c=='-') f=-; c=getchar();}
    while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
    return v*f;
    } int gcd(int x,int y)
    {
    if(y==) return x;
    return gcd(y,x%y);
    } int main()
    {
    //freopen("hdoj6229.in","r",stdin);
    //freopen("hdoj6299.out","w",stdout);
    int cas;
    scanf("%d",&cas);
    for(int v=;v<=cas;v++)
    {
    st.clear();
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=;i<=m;i++)
    {
    int x,y;
    scanf("%d%d",&x,&y);
    st.insert(x*N+y);
    }
    int s1=n*n*-n*;
    int s2=n*(n+)/*-*n-;
    set<int>::iterator t=st.begin();
    while(t!=st.end())
    {
    int s=*t;
    int x=s/N;
    int y=s%N;
    for(int i=;i<=;i++)
    {
    int tx=x+dx[i];
    int ty=y+dy[i];
    if(tx<||tx>=n||ty<||ty>=n||st.count(tx*N+ty)) continue;
    s1--;
    if(tx+ty>=n-) s2--;
    } if(x+y>=n-)
    {
    s2-=;
    if(x==||x==n-) s2++;
    if(y==||y==n-) s2++;
    } s1-=;
    if(x==||x==n-) s1++;
    if(y==||y==n-) s1++;
    t++;
    } int k=gcd(s1,s2);
    printf("Case #%d: %d/%d\n",v,s2/k,s1/k);
    }
    return ;
    }

【HDOJ6229】Wandering Robots(马尔科夫链,set)的更多相关文章

  1. 从随机过程到马尔科夫链蒙特卡洛方法(MCMC)

    从随机过程到马尔科夫链蒙特卡洛方法 1. Introduction 第一次接触到 Markov Chain Monte Carlo (MCMC) 是在 theano 的 deep learning t ...

  2. 蒙特卡洛马尔科夫链(MCMC)

    蒙特卡洛马尔科夫链(MCMC) 标签: 机器学习重要性采样MCMC蒙特卡洛 2016-12-30 20:34 3299人阅读 评论(0) 收藏 举报  分类: 数据挖掘与机器学习(41)  版权声明: ...

  3. MCMC(二)马尔科夫链

    MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)M-H采样和Gibbs采样(待填坑) 在MCMC(一)蒙特卡罗方法中,我们讲到了如何用蒙特卡罗方法来随机模拟求解一些复杂的连续积分或 ...

  4. 《principles of model checking》中的离散时间马尔科夫链

    <principles of model checking>中的离散时间马尔科夫链 说明:此文为我自学<principles of model checking>第十章内容的笔 ...

  5. 13张动图助你彻底看懂马尔科夫链、PCA和条件概率!

    13张动图助你彻底看懂马尔科夫链.PCA和条件概率! https://mp.weixin.qq.com/s/ll2EX_Vyl6HA4qX07NyJbA [ 导读 ] 马尔科夫链.主成分分析以及条件概 ...

  6. N元马尔科夫链的实现

    马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域.经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的 ...

  7. 马尔科夫链蒙特卡洛(Markov chain Monte Carlo)

    (学习这部分内容大约需要1.3小时) 摘要 马尔科夫链蒙特卡洛(Markov chain Monte Carlo, MCMC) 是一类近似采样算法. 它通过一条拥有稳态分布 \(p\) 的马尔科夫链对 ...

  8. Chapter 4 马尔科夫链

    4.1 引言 现在要研究的是这样一种过程: 表示在时刻的值(或者状态),想对一串连续时刻的值,比如:,, ... 建立一个概率模型. 最简单的模型就是:假设都是独立的随机变量,但是通常这种假设都是没什 ...

  9. 【强化学习】MOVE37-Introduction(导论)/马尔科夫链/马尔科夫决策过程

    写在前面的话:从今日起,我会边跟着硅谷大牛Siraj的MOVE 37系列课程学习Reinforcement Learning(强化学习算法),边更新这个系列.课程包含视频和文字,课堂笔记会按视频为单位 ...

随机推荐

  1. x86,x64,i386,i686

    x64其实就是64位, x86其实就是32位. 1. i386 适用于intel和AMD所有32位的cpu.以及via采用X86架构的32的cpu. intel平台包括8086,80286,80386 ...

  2. javaweb基础(22)_Servlet+JSP+JavaBean实战登陆

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  3. 解决AjaxFileUpload中文化/国际化的问题。

    由微软官方提供的AjaxControlToolKit,在ASP.NET开发过程中,确实能够给开发者带来很多的便利,节约开发者的重复劳动.这套控件也是比较成熟的,在性能方面也不会太差,至少能够满足一般开 ...

  4. SDWebImage解析

    SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下 ...

  5. C语言结构体和共用体_07

    概述 定义结构体类型变量的方法 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 用指针处理链表 共用体 枚举类型 用 typedef定义类型  概述 定义一个结构体的一般形 ...

  6. 【二分 最小割】cf808F. Card Game

    Digital collectible card games have become very popular recently. So Vova decided to try one of thes ...

  7. Linux-Mysql8.0

    Mysql8.0.12 基本操作 解释 命令 安装服务端 yum install mysql-community-server 启动 service mysqld start/restart 停止 s ...

  8. 【Shiro】调用doGetAuthenticationInfo进行认证成功之后,isAuthenticated是false的问题。

    使用@Configuration配置shiro无状态登录时出现的问题,在subject.login之后当前线程重新绑定了一个假定subject,isAuthenticated. 这里自定义的访问拦截器 ...

  9. 使用TensorFlow的卷积神经网络识别手写数字(1)-预处理篇

    功能: 将文件夹下的20*20像素黑白图片,根据重心位置绘制到28*28图片上,然后保存.经过预处理的图片有利于数字的准确识别.参见MNIST对图片的要求. 此处可下载已处理好的图片: https:/ ...

  10. 七周成为数据分析师06_MySQL

    关于 MySQL 的知识,主要也是一些实操和练习. 因为个人之前已经专门练习过 MySQL 操作,这里就不做笔记,之后另写一篇博文记录 MySQL 知识. 同时附上本课程对应的文字教程: 如何七周成为 ...