D. Broken robot

链接

题意:

  一个方格,从(x,y)出发,等价的概率向下,向左,向右,不动。如果在左右边缘上,那么等价的概率不动,向右/左,向下。走到最后一行即结束。求期望结束的步数。

分析:

  因为不能往上走,所以行与行之间存在转移,即上一行转移到下一行。

  同一行内的位置可以互相转移,所以可以对每一行内进行高斯消元,那么复杂度是$O(n^4)$,但是发现高斯消元的矩阵中每行只有三个位置有数,这个矩阵叫三对角矩阵,观察这个矩阵,发现可以O(n)消元。复杂度$O(n^2)$

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int mod = , N = ;
const double f31 = 1.0 / 3.0, f32 = 2.0 / 3.0, f41 = 1.0 / 4.0, f43 = 3.0 / 4.0, f38 = 8.0 / 3.0, f23 = 3.0 / 2.0; double dp[N][N], a[N][N];
int n, m, x, y; int ksm(int a,int b) {
int res = ;
while (b) {
if (b & ) res = 1ll * res * a % mod;
a = 1ll * a * a % mod;
b >>= ;
}
return res;
} void Make(int i) {
a[][] = f32;
a[][] = -f31;
a[][m + ] = f31 * dp[i + ][] + ;
a[m][m - ] = -f31;
a[m][m] = f32;
a[m][m + ] = f31 * dp[i + ][m] + ;
for (int j = ; j < m; ++j) {
a[j][j - ] = -f41;
a[j][j + ] = -f41;
a[j][j] = f43;
a[j][m + ] = f41 * dp[i + ][j] + ;
}
}
void pr(int l,int r) {
for (int i = l; i <= r; ++i) {
for (int j = ; j <= m + ; ++j)
printf("% .2lf ", a[i][j]);
puts("");
}
puts("");
}
void solve(int i) {
a[][] = ; a[][] *= f23; a[][m + ] *= f23;
for (int j = ; j < m; ++j) {
a[j][j - ] = ;
a[j][j + ] /= (a[j][j] + f41 * a[j - ][j]);
a[j][m + ] += f41 * a[j - ][m + ];
a[j][m + ] /= (a[j][j] + f41 * a[j - ][j]);
a[j][j] = ;
}
a[m][m - ] = ;
a[m][m + ] += (f31 * a[m - ][m + ]);
a[m][m + ] /= (a[m][m] + f31 * a[m - ][m]);
a[m][m] = ; dp[i][m] = a[m][m + ];
for (int j = m - ; j >= ; --j)
dp[i][j] = a[j][m + ] - a[j][j + ] * dp[i][j + ];
}
int main() {
n = read(), m = read(), x = read(), y = read();
if (m == ) {
printf("%.10lf", 2.0 * (n - x)); return ;
}
for (int i = n - ; i >= x; --i) {
Make(i);
solve(i);
}
printf("%.10lf", dp[x][y]);
return ;
}

CF 24 D. Broken robot的更多相关文章

  1. Codeforces Beta Round #24 D. Broken robot (打表找规律)

    题目链接: 点击我打开链接 题目大意: 给你 \(n,j\),再给出 \(m[0]\) 的坐标和\(a[0]-a[n-1]\) 的坐标. 让你输出 \(m[j]\) 的坐标,其中 \(m[i]\) 和 ...

  2. CodeForces 24D Broken robot (概率DP)

    D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  3. CodeForces 24D Broken robot(期望+高斯消元)

    CodeForces 24D Broken robot 大致题意:你有一个n行m列的矩形板,有一个机器人在开始在第i行第j列,它每一步会随机从可以选择的方案里任选一个(向下走一格,向左走一格,向右走一 ...

  4. 『Broken Robot 后效性dp 高斯消元』

    Broken Robot Description 你作为礼物收到一个非常聪明的机器人走在矩形板上.不幸的是,你明白它已经破碎并且行为相当奇怪(随机).该板由N行和M列单元组成.机器人最初位于第i行和第 ...

  5. Broken robot CodeForces - 24D (概率DP)

    You received as a gift a very clever robot walking on a rectangular board. Unfortunately, you unders ...

  6. CF24D Broken robot

    题目链接 题意 有一个\(n \times m\)的矩阵.机器人从点\((x,y)\)开始等概率的往下,往右,往左走或者不动.如果再第一列,那么不会往左走,再第m列不会往右走.也就是说机器人不会走出这 ...

  7. CF 1073C Vasya and Robot(二分答案)

    C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  8. CF24D Broken robot 后效性DP

    这题咕了好久..... 设$f[i][j]$表示从$(i,j)$到最后一行的期望步数: 则有 $ f[i][1]=\frac{1}{3}(f[i][1]+f[i][2]+f[i+1][1])+1$ $ ...

  9. cf 24 Game (观察+.. 想一想)

    题意: 给一个数N,从1到N. 每次取两个数,三种操作:加.减.乘,运算完得一个数,把那俩数删了,把这个数加进去. 重复操作N-1次. 问是否可能得到24.若可以,输出每一步操作. 思路: 小于4,不 ...

随机推荐

  1. [iOS] 列表滑动展开隐藏头部HeaderView

    平常遇到大多数的带有列表的应用都会遇到这个场景:在列表顶端有一个Header,当向上滑动列表时,压缩header,向下滑动列表到头时,展开header.这种样式在例如微博,twitter这些展示动态的 ...

  2. [Android] 仿照 Last App Switcher 写的小程序

      在Android众多工具类app中,Last App Switcher绝对算是一个让人用过就不会卸载的工具.LAS这个应用,它的功能很简单,就是通过一个浮动按钮实现在两个应用之间一键切换,但是非常 ...

  3. SqlServer为字段创建索引

    语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名) 创建索引实例: 聚簇索引 create clustered index index_name on table_name (c ...

  4. MySQL crash-safe replication(2):

    MySQL数据库的成功离不开其replicaiton(复制),相对于Oracle DG和Microsoft SQL Server Log Shipping来说,其简单易上手,基本上1,2分钟内根据手册 ...

  5. 【转】Ubuntu做日常开发电脑的系统是一种怎样的体验

    [原文]https://www.toutiao.com/i6594291159911105031/ Ubuntu 我现在已经基本不开windows了.学习娱乐开发基本都在Ubuntu 首先你要接受的是 ...

  6. CentOS7中部署Showdoc

    目录 CentOS7中部署Showdoc 前置环境 部署 配置文件 解压安装包 添加启动服务 设置权限 运行安装 界面 CentOS7中部署Showdoc 文:铁乐与猫 前置环境 因为showdoc其 ...

  7. JDK5的新特性之 增强for

      package cn.itcast.day19.foreach; import java.util.ArrayList; import java.util.Collection; import j ...

  8. Hadoop HBase概念学习系列之HBase里的HRegion(五)

    首先,要区分,HRegion服务器包含两大部分:HLog部分和HRegion部分 HBase里的HRegion服务器  HBase里的HRegion 当表的大小超过设置值的时候,HBase会自动将表划 ...

  9. 每年有20万人进军IT行业,为何还会人才短缺?

    众所周知,IT行业是个高薪行业,也是很多人的梦想职业,在全球最缺人的十大行业中IT行业居首位. 但是现在很多人都有一个疑问: 几乎每所大学里都有计算机技术相关专业,再加上IT培训机构的输出,每年培养出 ...

  10. Django商城项目笔记No.11用户部分-QQ登录1获取QQ登录网址

    Django商城项目笔记No.11用户部分-QQ登录 QQ登录,亦即我们所说的第三方登录,是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目. 若想实现QQ登录,需要成为QQ互联 ...