hdu2262 高斯消元
题目:有一个地图,一个人从某个点出发,问走到花园的期望步数为多少
设某点的期望步数为Ei。
那么目标的Ei=0。
Ei=(Enext1+Enext2……Enextk)/k+1。
为什么是这个公式 因为 如果 Ei-1的期望应该等于所有从Ei出发的点的期望总和
bfs完 套一个高斯消元就ok了
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>
#include <cmath>
#include <queue>
using namespace std;
#define eps 1e-9
const int MAXN=;
double a[MAXN][MAXN],x[MAXN];//方程的左边的矩阵和等式右边的值,求解之后x存的就是结果
int equ,var;//方程数和未知数个数
int Gauss(int cequ, int cvar)
{
equ=cequ; var=cvar;
int i,j,k,col,max_r;
for(k=,col=;k<equ&&col<var;k++,col++)
{
max_r=k;
for(i=k+;i<equ;i++)
if(fabs(a[i][col])>fabs(a[max_r][col]))
max_r=i;
if(fabs(a[max_r][col])<eps)continue;
if(k!=max_r)
{
for(j=col;j<var;j++)
swap(a[k][j],a[max_r][j]);
swap(x[k],x[max_r]);
}
x[k]/=a[k][col];
for(j=col+;j<var;j++)a[k][j]/=a[k][col];
a[k][col]=;
for(i=;i<equ;i++)
if(i!=k)
{
x[i]-=x[k]*a[i][col];
for(j=col+;j<var;j++)a[i][j]-=a[k][j]*a[i][col];
a[i][col]=;
}
}
return ;
}
char str[][];
bool falg[][];
int dx[]={,,,-};
int dy[]={,-,,};
void bfs(int n,int m)
{
queue<int>Qy,Qx;
memset(falg,false,sizeof(falg));
while(!Qy.empty())Qy.pop();
while(!Qx.empty())Qx.pop();
for(int i=; i<n; i++)
for(int j=; j<m; j++)
if(str[i][j]=='$'){
falg[i][j]=true;
Qx.push(i);
Qy.push(j);
} while(!Qy.empty()){
int ux=Qx.front();
int uy=Qy.front();
Qx.pop();
Qy.pop();
for(int i=; i<; i++)
{
int tx=ux+dx[i];
int ty=uy+dy[i];
if(tx>=&&ty>=&&tx<n&&ty<m&&str[tx][ty]!='#'&&falg[tx][ty]==false){
falg[tx][ty]=true;
Qy.push(ty);
Qx.push(tx);
}
}
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==){
for(int i=; i<n; i++){
scanf("%s",str[i]);
}
memset(a,,sizeof(a));
memset(x,,sizeof(x));
bfs(n,m);
int sx=-,sy=-;
for(int i=; i<n; i++)
for(int j=; j<m; j++)
{ if(str[i][j]=='#')continue;
int cnt=;
if(str[i][j]=='$'){
a[i*m+j][i*m+j]=;
x[i*m+j]=;
continue;
}
if(str[i][j]=='@'){
sx=i; sy=j;
}
for(int k=; k<; k++){
int tx=i+dx[k];
int ty=j+dy[k];
if(tx>=&&ty>=&&tx<n&&ty<m&&str[tx][ty]!='#'&&falg[tx][ty]){
a[i*m+j][tx*m+ty]=-;
cnt++;
}
}
a[i*m+j][i*m+j]=cnt;
x[i*m+j]=cnt;
}
if(sx!=-&&sy!=-&&falg[sx][sy]&&Gauss(n*m,n*m)){
printf("%.6lf\n",x[sx*m+sy]);
}else{
puts("-1");
}
}
return ;
}
hdu2262 高斯消元的更多相关文章
- HDU2262;Where is the canteen(高斯消元+期望)
传送门 题意 给出一张图,LL从一个点等概率走到上下左右位置,询问LL从宿舍走到餐厅的步数期望 分析 该题是一道高斯消元+期望的题目 难点在于构造矩阵,我们发现以下结论 设某点走到餐厅的期望为Ek 1 ...
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
- 【BZOJ-3270】博物馆 高斯消元 + 概率期望
3270: 博物馆 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 292 Solved: 158[Submit][Status][Discuss] ...
- *POJ 1222 高斯消元
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9612 Accepted: 62 ...
- [bzoj1013][JSOI2008][球形空间产生器sphere] (高斯消元)
Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧 ...
- hihoCoder 1196 高斯消元·二
Description 一个黑白网格,点一次会改变这个以及与其连通的其他方格的颜色,求最少点击次数使得所有全部变成黑色. Sol 高斯消元解异或方程组. 先建立一个方程组. \(x_i\) 表示这个点 ...
- BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基
[题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...
- SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元
[题目分析] Matrix-Tree定理+高斯消元 求矩阵行列式的值,就可以得到生成树的个数. 至于证明,可以去看Vflea King(炸树狂魔)的博客 [代码] #include <cmath ...
- UVALive 7138 The Matrix Revolutions(Matrix-Tree + 高斯消元)(2014 Asia Shanghai Regional Contest)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=6 ...
随机推荐
- Maven项目常见的小问题
pom.xml文件头报错 场景 例Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 from ...
- Java+Selenium如何解决空指针
1.问题描述:浏览器获取当期窗口值获取为空.
- MyBatis的核心组件
MyBatis的核心组件主要分为4个部分 SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分步构建的Builder模式 ...
- git push error:error: insufficient permission for adding an object to repository database ./object解决
在服务器代码库xxx.git文件夹中:1.sudo chmod -R g+ws *2.sudo chgrp -R mygroup * //mygroup是该文件夹的所有组3.git repo-conf ...
- pymongo模块 目录
MongoDB pymongo模块 MongoDB pymongo模块 查询 MongoDB pymongo模块 插入数据 MongoDB pymongo模块 更新数据 MongoDB pymongo ...
- 30个redis.conf 配置项说明
redis.conf 配置项说明如下: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,R ...
- HBase 的MOB压缩分区策略介绍
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zNZQhb07Nr/article/details/79832392 HBase应用场景很广泛.社区 ...
- JetBrains 2017/2018全系列产品激活工具
可谓是工欲善其事,必先利其器,相信作为优秀开发工程师的你都想拥有一套快捷高效的编码工具,而JetBrains这家公司的产品,不管是那种编程语言,其开发工具确实让开发者们着迷,JetBrains的产品博 ...
- Redis入门到高可用(九)——无序set
一.结构 特点:无序,无重复,支持集合间操作 二.主要API smembers : 无序:(会阻塞)小心使用,可用sscan代替 spop: 从集合中弹出元素,每次只能弹出一个: 三.实战 抽奖系统 ...
- Java的HashMap是如何实现的?
以下内容转自:http://blog.csdn.net/vking_wang/article/details/14166593 1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储 ...