题目描述

船长正在拯救她的船员,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. Could not create pool connection. The DBMS driver exception was: null, message from server: "Host '192.168.XX.XX' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

    早上打开浏览器准备登陆某个系统,发现Error 404--Not Found,有点奇怪,这个服务器应该没人用了才对,然后到weblogic后台去看日志,报如下错误: "Could not c ...

  2. C语言第一次博客作业—输入输出

    一.PTA实验作业 题目1:7-3 温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1 ...

  3. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.19

    第三次会议:2017-11-16 第二次会议讨论的还没有完全实现,于是在第三次会议上对此进行了一些对我们工作上的看法,得出结论:多花时间啊!!!! 又没照照片图: 会议主要内容: 1.登录注册完善 2 ...

  4. 从PRISM开始学WPF(六)MVVM(三)事件聚合器EventAggregator?

    从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...

  5. GitChat招募IT类写作作者

    GitChat是一个移动端的IT知识.技术分享平台,于2017.10和CSDN合并,成为其旗下独立品牌. 我们正在寻求有互联网基因的人来一起分享IT人员的关切,诚挚邀请您来做一次分享(让IT类文章变现 ...

  6. BEM 中文翻译

    BEM 原文请看 getBEM Introduction(介绍) Block 独立实体,独立的意义 Examples:header, container, menu, checkbox, input ...

  7. 教你在不使用框架的情况下也能写出现代化 PHP 代码

    我为你们准备了一个富有挑战性的事情.接下来你们将以 无 框架的方式开启一个项目之旅. 首先声明, 这篇并非又臭又长的反框架裹脚布文章.也不是推销 非原创 思想 .毕竟, 我们还将在接下来的开发之旅中使 ...

  8. sublime的使用技巧

    ctr+shift+d是复制当前行当下一行2.使用Sublime text 3 编写代码是一种享受,使用Sublime text 3 格式化HTML代码,需要安装插件,具体安装步骤如下:1.打开菜单- ...

  9. vmware 12 安装 mac os 10.12正式版

    1.首先下载安装vmware 12 pro ,将VT打开(虚拟功能,以前安装过虚拟机点的同学可忽略). 2.下载mac ox 10.12正式版镜像文件(cdr后缀). 3.下载Unlocker208( ...

  10. 零基础大数据入门教程:Java调用阿里云短信通道服务

    这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1 ...