hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS
题意:N*M的网格图里,有起点S,终点T,然后有'.'表示一般房间,'#'表示毒气房间,进入毒气房间要消耗一个氧气瓶,而且要多停留一分钟,'B'表示放氧气瓶的房间,每次进入可以获得一个氧气瓶,最多只能带5个,'P'表示有加速器的房间,进入可以获得一个,可以拥有无限个,然后使用一个可以让你用的时间减一。
题解:对于P房间,也就是到达时不花费时间,
对于#房间,也就是进入前必须要有氧气瓶,消耗的时间为2
对于B房间,氧气瓶数量num=min(num+1,5)
因为有氧气瓶,所以每一个节点状态除了位置x,y,还有当前氧气瓶x,当前花费的时间time
这样的节点扔进队列就行了,按time小的顺序拿出来继续,(所以用了个优先队列)第一次到达终点的那个time就是最小的time
#include<bits/stdc++.h>
using namespace std;
bool vis[][][];
int n,m;
struct Node
{
int x,y,ox,step;
Node() {}
Node(int _x,int _y,int _ox,int _step)
{
x=_x;
y=_y;
ox=_ox;
step=_step;
}
bool operator<(const Node& e) const {return step>e.step;}
};
char ch[][];
priority_queue<Node> Q;
int p[]={,,,-};
int q[]={,-,,};
int main()
{
while (scanf("%d%d",&n,&m))
{
if (n==&&m==) break;
for (int i=;i<n;i++) scanf("%s",ch[i]);
int sx,sy,ex,ey;
for (int i=;i<n;i++)
for (int j=;j<m;j++)
{
if(ch[i][j]=='S')
{
sx=i;sy=j;
}else
if(ch[i][j]=='T')
{
ex=i;ey=j;
}
}
while(!Q.empty()) Q.pop();
Node start(sx,sy,,);
memset(vis,,sizeof(vis));
vis[sx][sy][]=;
Q.push(start);
bool ok=false;
while(!Q.empty())
{
Node node=Q.top();
Q.pop();
if (node.x==ex&&node.y==ey)
{
ok=true;
printf("%d\n",node.step);
break;
}
for (int i=;i<=;i++)
{
int xx=node.x+p[i],yy=node.y+q[i];
if (xx< || xx>=n || yy< || yy>=m) continue;
int step=node.step;
if(ch[xx][yy]=='B')
{
int _ox=min(,node.ox+);
if (vis[xx][yy][_ox]) continue;
vis[xx][yy][_ox]=;
Node temp(xx,yy,_ox,step+);
Q.push(temp);
}else
if(ch[xx][yy]=='#')
{
int _ox=node.ox;
if (!_ox) continue;
_ox--;
if(vis[xx][yy][_ox]) continue;
vis[xx][yy][_ox]=;
Node temp(xx,yy,_ox,step+);
Q.push(temp);
}else
if(ch[xx][yy]=='P')
{
int _ox=node.ox;
if(vis[xx][yy][_ox]) continue;
vis[xx][yy][_ox]=;
Node temp(xx,yy,_ox,step);
Q.push(temp);
}else
{
int _ox=node.ox;
if(vis[xx][yy][_ox]) continue;
vis[xx][yy][_ox]=;
Node temp(xx,yy,_ox,step+);
Q.push(temp);
}
}
}
if (!ok) puts("-1");
}
return ;
}
hihoCoder-1828 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II BFS的更多相关文章
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II(优先队列广搜)
#include<bits/stdc++.h> using namespace std; ; ; char G[maxN][maxN]; ]; int n, m, sx, sy, ex, ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
任意门:http://hihocoder.com/problemset/problem/1828 Saving Tang Monk II 时间限制:1000ms 单点时限:1000ms 内存限制:25 ...
- hihoCoder #1831 : 80 Days-RMQ (ACM/ICPC 2018亚洲区预选赛北京赛站网络赛)
水道题目,比赛时线段树写挫了,忘了RMQ这个东西了(捞) #1831 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an int ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 B Tomb Raider 【二进制枚举】
任意门:http://hihocoder.com/problemset/problem/1829 Tomb Raider 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 L ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛D-80 Days--------树状数组
题意就是说1-N个城市为一个环,最开始你手里有C块钱,问从1->N这些城市中,选择任意一个,然后按照顺序绕环一圈,进入每个城市会有a[i]元钱,出来每个城市会有b[i]个城市,问是否能保证经过每 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛-B:Tomb Raider(二进制枚举)
时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Lara Croft, the fiercely independent daughter of a missing adv ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(尺取)题解
题意:n个城市,初始能量c,进入i城市获得a[i]能量,可能负数,去i+1个城市失去b[i]能量,问你能不能完整走一圈. 思路:也就是走的路上能量不能小于0,尺取维护l,r指针,l代表出发点,r代表当 ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛
题意:到一个城市得钱,离开要花钱.开始时有现金.城市是环形的,问从哪个开始,能在途中任意时刻金钱>=0; 一个开始指针i,一个结尾指针j.指示一个区间.如果符合条件++j,并将收益加入sum中( ...
- hihoCoder-1829 2018亚洲区预选赛北京赛站网络赛 B.Tomb Raider 暴力 字符串
题面 题意:给你n个串,每个串都可以选择它的一个长度为n的环形子串(比如abcdf的就有abcdf,bcdfa,cdfab,dfabc,fabcd),求这个n个串的这些子串的最长公共子序列(每个串按顺 ...
随机推荐
- Assembly之Instruction之Byte and Word
Byte and word issues The MSP430 is byte-addressed, and little-endian. Word operands must be located ...
- 读书笔记之:C++ Primer (第4版)及习题(ch01-ch11) [++++]
读书笔记之:C++ Primer (第4版)及习题(ch01-ch11) [++++] 第2章 数据和基本类型 1. 整型 2. 习题:左值和右值 3. C++关键字/保留字和操作符替代值 4. 声明 ...
- mac 上执行 rm -rf /
# 很可怕的指令,清空磁盘所有资料,千万不要用 sudo 尝试,吓的小心肝差掉跳出来 rm -rf / 无聊,想执行rm -rf /会怎样,想起没加sudo时对~/download执行提示权限不足,被 ...
- webpack学习(六)—webpack+react+es6(第3篇)
接上篇 : webpack学习(六)—webpack+react+es6(第2篇) 上篇其实是有问题的,问题在取服务器数据这块.this.props 表示那些一旦定义,就不再改变的特性,而 this. ...
- struct-计算机学习日志
STRUCT实验目的模拟缓冲区溢出的情况.代码总览#include <stdio.h>#include <stdlib.h>typedef struct { int a[2]; ...
- BZOJ : [Usaco2013 Nov]Crowded 单调队列
正反两遍个来一次单调队列 DP 即可. Code: #include<cstdio> #include<deque> #include<algorithm> usi ...
- DOCKER - J2EE中容器:WEB容器、EJB容器
转自:http://www.voidcn.com/article/p-yizkqdxp-zg.html
- WebLogic的服务搭建
一.简介 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和管理大型分布式Web ...
- [luogu2587 ZJOI2008] 泡泡堂 (贪心)
传送门 Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛 ...
- [Codeup 25482]选美
[Codeup 25482 ]选美 题目 一年一度的星哥选美又拉开了帷幕 N个人报名参加选拔,每个人都有着各自的相貌参数和身材参数(不大于 10000 的正整数).你的任务是尽可能让更多人被星哥选中, ...