hdu2262 Where is the canteen
Where is the canteen
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1313 Accepted Submission(s): 384
move, he check front, back, left and right to see which of those four adjacent squares are free, and randomly walk to one of the free squares until landing on a canteen.
'@' is the start location. There is exactly one in each case.
'#' is an impassible square.
'$' is a canteen. There may be more than one in the campus.
'.' is a free square.
@$
2 2
@.
.$
1 3
@#$
4.000000
-1
/*
将点所有点令为1至n*m-1那么建立n*m个方程
对于一个任一个点En=(E1+E2+E3)/cnt+1; cnt为可以走的方向数 [0,4]
最后用高斯消元模版求解(用kuangbin的模版不知为什么这么慢)
而且餐厅有很多个
*/
#include<iostream>
#include<cmath>
#include<queue>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; #define eps 1e-12
const int MAXN = 250;
char mp[20][20];
bool vis[20][20];
int n,m;
int sx,sy;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,1,-1};
struct Node{
int x,y;
}aa,bb;
queue<Node>q;
int temp[MAXN];
double a[MAXN][MAXN];
double x[MAXN];
int equ,var; inline int C(int x,int y){
return x*m+y;
}
bool Ok(int x,int y,int d){
if(d==0){
if(x>=0 && x<n && y>=0 && y<m && mp[x][y]!='#' && !vis[x][y]) return true;
}else {
if(x>=0 && x<n && y>=0 && y<m && mp[x][y]!='#' && vis[x][y]) return true;
}
return false;
}
void Bfs(){
int i,j,k;
while(!q.empty()){
bb=q.front(); q.pop();
for(i=0;i<4;i++){
aa.x=bb.x+dx[i];
aa.y=bb.y+dy[i];
if(Ok(aa.x,aa.y,0)){
vis[aa.x][aa.y]=1;
q.push(aa);
}
}
}
} void Makefunction(){
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<m;j++){
int cnt=0;
if(mp[i][j]=='#') continue;
if(mp[i][j]=='$'){
a[C(i,j)][C(i,j)]=1; continue;
}
for(k=0;k<4;k++){
int xx=i+dx[k];
int yy=j+dy[k];
if(Ok(xx,yy,1)){
cnt++; a[C(i,j)][C(xx,yy)]=1;
}
}
a[C(i,j)][C(i,j)]=-1*cnt;
x[C(i,j)]=-1*cnt;
}
}
int Gauss(){
int i,j,k,col,max_r; //max_r 指现在对哪一行操作 equ 方程数 var 未知数个数
for(k=0,col=0;k<equ && col<var;k++,col++){
max_r=k;
for(i=k+1;i<equ;i++)
if(fabs(a[i][col])>fabs(a[max_r][col])) max_r=k; //寻找这个未知数最大的一个
if(fabs(a[max_r][col])<eps) {
if(col==C(sx,sy)) return 0;
else 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+1;j<var;j++) a[k][j]/=a[k][col];
a[k][col]=1;
for(i=0;i<equ;i++)
if(i!=k){
x[i]-=x[k]*a[i][col];
for(j=col+1;j<var;j++) a[i][j]-=a[k][j]*a[i][col];
a[i][col]=0;
}
}
return 1;
} int main(){
//freopen("in.txt","r",stdin);
int i,j,k;
while(~scanf("%d %d",&n,&m)){
q.empty();
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++) scanf("%s",mp[i]);
for(i=0;i<n;i++)
for(j=0;j<m;j++){
if(mp[i][j]=='@'){ sx=i; sy=j; }
if(mp[i][j]=='$'){ aa.x=i; aa.y=j; q.push(aa); vis[i][j]=1; }
}
Bfs();
memset(a,0,sizeof(a));
memset(x,0,sizeof(x));
Makefunction();
var=n*m; equ=n*m;
;
if(vis[sx][sy] && Gauss() ) printf("%lf\n",x[C(sx,sy)]);
else printf("-1\n");
}
return 0;
}
hdu2262 Where is the canteen的更多相关文章
- HDU-2262 Where is the canteen 概率DP,高斯消元
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2262 题意:LL在一个迷宫里面转,每次走向周围能走的点的概率都是一样的,现在LL要随机的走到cante ...
- HDU2262;Where is the canteen(高斯消元+期望)
传送门 题意 给出一张图,LL从一个点等概率走到上下左右位置,询问LL从宿舍走到餐厅的步数期望 分析 该题是一道高斯消元+期望的题目 难点在于构造矩阵,我们发现以下结论 设某点走到餐厅的期望为Ek 1 ...
- HDU 2262 Where is the canteen 期望dp+高斯消元
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...
- unknown directive "" in E:\canteen\nginx-1.16.0/conf/nginx.conf:3-------文本编辑器修改nginx配置文件的坑
nignx小白一个,今天在配置nginx的时候,理所当然的用了文本编辑器编辑并保存了一下nginx的nginx.conf配置文件,一不小心就折腾了几个钟. 保存之后就nginx -s reload一下 ...
- 1350. Canteen(map)
1350 这题没什么 就考一下map的用法吧 #include <iostream> #include<cstdio> #include<cstring> #in ...
- hdu2262 高斯消元
题目:有一个地图,一个人从某个点出发,问走到花园的期望步数为多少 设某点的期望步数为Ei. 那么目标的Ei=0. Ei=(Enext1+Enext2……Enextk)/k+1. 为什么是这个公式 因为 ...
- SQLServer------Join的使用方法
参考菜鸟教程网: http://www.runoob.com/sql/sql-join.html select a.Canteen,b.OrderNum,b.CreateTime,c.Name fro ...
- IELTS - Word List 28
1, The lawsuit is very much o the lawyer's mind. 2, The canteen was absolutely packed. 3, Doctors di ...
- Do things for others
早上,按照平常的时间去吃早饭,食堂格外的空旷,打饭的员工说今天人很少,我说昨天是有元旦晚会,她说今天是放假,我后来想,还是她说的更有道理.她看的比我清楚更清楚! 幸亏昨晚上记录下了早上要帮别人搜论文的 ...
随机推荐
- 洛谷 [P3973] 线性代数
最大权闭合子图,神题 这不是线性代数,这是网络流. 我们看见这是一堆矩阵的运算,而且最后变成了一个数,那么我们就想到,把这个矩阵乘法的过程用具体的数字推出来 我们发现,a是一个01矩阵,然后其实就可以 ...
- BZOJ 3569: DZY Loves Chinese II [高斯消元XOR 神题]
http://www.lydsy.com/JudgeOnline/problem.php?id=3569 题意:多次询问一个无向连通图当图中某k条边消失时这个图是否联通 强制在线 太神啦啦啦啦啦啦啦啦 ...
- PHP基础点滴
PHP基础点滴 双冒号::的用法: 双冒号操作符即作用域限定操作符Scope Resolution Operator可以访问静态.const和类中重写的属性与方法. 伪类型(pseudo-types) ...
- MySQL开启binlog并且保存7天有效数据
开启binlog日志(在[mysqld]下修改或添加如下配置): server-id=1 log-bin=mysql-bin binlog_format=MIXED binlog日志模式 Mysql复 ...
- MySQL select语句直接导出数据
select * into outfile '文件存放路径' from 表名; (先记下来,还未测试)
- mysql 查找某个表在哪个库
SELECT table_schema FROM information_schema.TABLES WHERE table_name = '表名';
- 2017年 Java 程序员,风光背后的危机
不得不承认,经历过行业的飞速发展期,互联网的整体发展趋于平稳.为什么这么说?为什么要放在 Java 程序员的盘点下说? 的确,对于进可攻前端,后可守后端大本营的 Java 程序员而言,虽然供应逐年上涨 ...
- ci框架基础知识点
一.路由 1.index.php/test/hello->控制器test的hello方法 2. 也可以手动配置路由 app/config/routes.php中 I:$route[' ...
- 使用maven搭建hibernate的pom文件配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 通过js区分移动端浏览器(微信浏览器、QQ浏览器、QQ内置浏览器)
由于公司业务中涉及到一个分享指引功能,而像微信.QQ内置浏览器需要引导用户点击右上角进行操作,其他浏览器则引导点击浏览器下方进行操作,因此需要区分浏览器类型: 通过在页面alert(navigator ...