题目描述

船长正在拯救她的船员,Beefalo 博士。

和所有伟大的冒险故事一样,这个故事也是发生在一个2D平面上的。囧

这个平面是M*N的格子组成的网格,代表着船长的世界的一个侧视图。

有些格子是空的,另一些则是实心的,并且不能直接通过。

很不幸的是,船长跳不起来。她必须遵守这个世界的特殊物理法则。

1)如果船长的正下方没有方块(换句话说,即使她正在网格的边缘),那么她就会掉入宇宙中,同时意味着冒险失败。

2)如果船长的正下方的方块是空的,那么她就会掉到这个方块,

3)在不满足1)与2)的情况下,船长可以做一下的事情:

a) 如果左边(或右边)的方格是空的,那么她可以走到那个格子。

b船长可以翻转重力的方向

当船长改变翻转重力的方向时,我们就改变船长”下方“的定义。

”下方“的定义只能是两种

(A)比船长位置所在的方格的列编号更大的格子,

(B)比船长位置所在的方格的列编号更小的格子,

一开始的时候,“下方”的定义是比船长位置所在方格的列编号更大的格子。

Beefalo博士正迷失在这个世界中的某一处,请帮助船长从起点到达博士的地方。

如果可以到达,请输出最少需要的翻转重力的次数。

如果不可以到达,请输出-1

输入

第1行输入两个整数 N,M

第2行到N+1行中,第i+1行则是代表船长世界的第i行。每行有M个字符。

其中","代表着一个空的格子,"#"代表着一个实心的格子,"C"代表着船长的位置,"D"代表着博士的位置。

输出

一行,输出一个整数。

如果船长可以到达,请输出最少需要的翻转重力的次数。

如果不可以到达,请输出-1

样例输入

5 5 ##### #...# #...D #C... ##.##

样例输出

3

提示

输出解释

首先,船长在(4,2),接着她翻转重力,到达(2,2)

接着她向右走走到(2,4),接着她第二次翻转重力,到达(4,4)

然后她继续向右走到(4,5),最后在翻转一次重力,到达博士所在的(3,5)

搜索,因为数据较大,用优先队列优化。

重点是“掉落”操作,但也不难,注意细节,到达终点直接输出。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include<iostream>
using namespace std;
struct Messi
{
int x,y,s;
bool b;
bool operator<(const Messi& rhs) const
{
return s>rhs.s;
}
} c;
priority_queue<Messi> q;
int xs,ys,xe,ye,n,m,f[][],vis[][][];
void G(int x,int y)
{
int xx=x,b=;
if (c.b==)
{
while (xx<=n&&f[xx+][y]) xx++;
if (xx<n&&vis[xx][y][]==)
vis[xx][y][]=,q.push((Messi){xx,y,c.s,});
}
else
{
while (xx>=&&f[xx-][y]) xx--;
if (xx>&&vis[xx][y][]==)
vis[xx][y][]=,q.push((Messi){xx,y,c.s,});
}
if (y==ye)
{
if ((c.b==&&xx<=xe&&x>=xe)||(c.b==&&xx>=xe&&x<=xe))
{
cout<<c.s;
exit();
}
}
}
int main()
{int i,j;
char ch;
cin>>n>>m;
for (i=; i<=n; i++)
for (j=; j<=m; j++)
{
cin>>ch;
if (ch=='#')
f[i][j]=;
if (ch=='C')
{f[i][j]=;
xs=i;
ys=j;
}
if (ch=='D')
{f[i][j]=;
xe=i;
ye=j;
}
if (ch=='.')
f[i][j]=;
}
c.b=;
c.s=;
G(xs,ys);
while (q.empty()==)
{
c=q.top();
q.pop();
//cout<<c.x<<' '<<c.y<<' '<<c.b<<' '<<c.s<<endl;
if (c.x==xe&&c.y==ye)
{
cout<<c.s;
return ;
}
if (c.y->=&&f[c.x][c.y-])
G(c.x,c.y-);
if (c.y+<=m&&f[c.x][c.y+])
G(c.x,c.y+);
c.b=(c.b==);
c.s+=;
G(c.x,c.y);
}
cout<<-;
}

[USACO13OPEN]重力异常的更多相关文章

  1. 圆锥体完全均衡下重力异常正演 [MATLAB]

    在完全均衡的模型下,若地表有一圆锥体(山峰等),计算跨越山顶的截面上所得到的各种重力异常. 地壳密度 $kg\cdot m^{-3}$ 上地幔密度 $g\cdot cm^{-3}$ 地表地形圆锥体半径 ...

  2. 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告

    [USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...

  3. 洛谷 P2209 [USACO13OPEN]燃油经济性Fuel Economy

    P2209 [USACO13OPEN]燃油经济性Fuel Economy 题目描述 Farmer John has decided to take a cross-country vacation. ...

  4. [USACO13OPEN]照片Photo

    题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...

  5. P2209 [USACO13OPEN]燃油经济性Fuel Economy

    题面 sol:(思想):开一个大根堆和一个小根堆,每次计算到下了一个加油站用掉的油时尽量用小根堆中的元素,且同时删去大根堆中的相应位置的元素,当前加油站如果足够便宜,就可以把大根堆中的元素替换掉: ( ...

  6. 洛谷P3085 [USACO13OPEN]阴和阳Yin and Yang(点分治,树上差分)

    洛谷题目传送门 闲话 偶然翻到一道没有题解的淀粉质,想证明一下自己是真的弱 然而ZSYC(字符串组合)早就切了 然后证明成功了,WA到怀疑人生,只好借着ZSY的代码拍,拍了几万组就出来了... 思路 ...

  7. P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)

    题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...

  8. 洛谷3084 [USACO13OPEN]照片Photo

    原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...

  9. P3084 [USACO13OPEN]照片Photo

    题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...

随机推荐

  1. alpha-咸鱼冲刺day4

    一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 QAQ具体工作量没啥进展.但是前后端终于可以数据交互了!.. 四,问题困难 日常啥都不会,百度真心玩一年. 还得自学nodejs ...

  2. 201621123057 《Java程序设计》第7周学习总结

    1. 本周学习总结 1.1 思维导图:Java图形界面总结 1.2 可选:使用常规方法总结其他上课内容. 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 答: ...

  3. 实验二Java面向对象程序设计实验报告(2)

    实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...

  4. 手把手教你 LabVIEW 串口仪器控制——VISA 驱动下载安装篇

           仪器控制,核心在于 VISA 函数..有些仪器可能不需要 VISA,有自己的 DLL 什么的,我就管不着.        正常情况下,大家安装的 LabVIEW,都是不带 VISA 驱动 ...

  5. intellij idea 找不到或无法加载主类

    解决intellij idea 找不到或无法加载主类,请看以下图文介绍 然后idea会重启,等idea启动后 右侧的maven clean 一下,然后再compile就解决了

  6. javascript原型链__proto__属性的理解

    在javascript中,按照惯例,构造函数始终都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头.一个方法使用new操作符创建,例如下面代码块中的Person1(可以吧Person1看做 ...

  7. phpadmin增加使得项目能连接数据库

    感谢:http://jingyan.baidu.com/article/e4511cf332b9832b845eaf27.html 值得注意: 1.phpadmin的目录:D:\developsoft ...

  8. Python内置函数(34)——map

    英文文档: map(function, iterable, ...) Return an iterator that applies function to every item of iterabl ...

  9. python 中 reduce 函数的使用

    reduce()函数也是Python内置的一个高阶函数. reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接 ...

  10. html5shiv.js和respond.min.js的作用

    html5shiv:解决ie9以下浏览器对html5新增标签的不识别,并导致CSS不起作用的问题. respond.min:让不支持css3 Media Query的浏览器包括IE6-IE8等其他浏览 ...