HDU 3533 Escape (BFS + 预处理)
Escape
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 541 Accepted Submission(s): 141
The blue army is eager to revenge, so it tries its best to kill Little A during his escape. The blue army places many castles, which will shoot to a fixed direction periodically. It costs Little A one unit of energy per second, whether he moves or not. If he uses up all his energy or gets shot at sometime, then he fails. Little A can move north, south, east or west, one unit per second. Note he may stay at times in order not to be shot. To simplify the problem, let’s assume that Little A cannot stop in the middle of a second. He will neither get shot nor block the bullet during his move, which means that a bullet can only kill Little A at positions with integer coordinates. Consider the example below. The bullet moves from (0, 3) to (0, 0) at the speed of 3 units per second, and Little A moves from (0, 0) to (0, 1) at the speed of 1 unit per second. Then Little A is not killed. But if the bullet moves 2 units per second in the above example, Little A will be killed at (0, 1). Now, please tell Little A whether he can escape.#include <iostream>
#include <cstdio>
#include <queue>
using namespace std; const int SIZE = ;
const int UPDATE[][] = {{,},{,},{,}};
int N,M,K,E;
bool FIRE[SIZE][SIZE][];
bool VIS[SIZE][SIZE][];
bool CASTLE[SIZE][SIZE];
struct Node
{
int x,y,t,e;
bool check(void)
{
if(x < || x > N || y < || y > M || t > E || VIS[x][y][t] || CASTLE[x][y] ||
FIRE[x][y][t] || !e || N - x + M - y > e)
return false;
return true;
}
};
struct Cas
{
char ch;
int t,v,x,y;
}; void deal(char ch,int t,int v,int x,int y);
void bfs(void);
int main(void)
{
Cas temp[];
while(scanf("%d%d%d%d",&N,&M,&K,&E) != EOF)
{
fill(&FIRE[][][],&FIRE[SIZE - ][SIZE - ][],false);
fill(&VIS[][][],&VIS[SIZE - ][SIZE - ][],false);
fill(&CASTLE[][],&CASTLE[SIZE - ][SIZE - ],false); for(int i = ;i < K;i ++)
{
scanf(" %c%d%d%d%d",&temp[i].ch,&temp[i].t,&temp[i].v,&temp[i].x,&temp[i].y);
CASTLE[temp[i].x][temp[i].y] = true;
}
if(CASTLE[N][M])
{
puts("Bad luck!");
continue;
}
for(int i = ;i < K;i ++)
deal(temp[i].ch,temp[i].t,temp[i].v,temp[i].x,temp[i].y);
bfs();
} return ;
} void deal(char ch,int t,int v,int x,int y)
{
if(ch == 'W')
{
int stop = ;
for(int j = y - ;j >= ;j --)
if(CASTLE[x][j])
{
stop = j;
break;
}
for(int j = y - v,ini = ;j >= stop;j -= v,ini ++)
for(int k = ini;k <= E;k += t)
FIRE[x][j][k] = true; }
else if(ch == 'E')
{
int stop = M;
for(int j = y + ;j <= M;j ++)
if(CASTLE[x][j])
{
stop = j;
break;
} for(int j = y + v,ini = ;j <= stop;j += v,ini ++)
for(int k = ini;k <= E;k += t)
FIRE[x][j][k] = true;
}
else if(ch == 'N')
{
int stop = ;
for(int j = x - ;j >= ;j --)
if(CASTLE[j][y])
{
stop = j;
break;
}
for(int j = x - v,ini = ;j >= stop;j -= v,ini ++)
for(int k = ini;k <= E;k += t)
FIRE[j][y][k] = true;
}
else if(ch == 'S')
{
int stop = N;
for(int j = x + ;j <= N;j ++)
if(CASTLE[j][y])
{
stop = j;
break;
}
for(int j = x + v,ini = ;j <= stop;j += v,ini ++)
for(int k = ini;k <= E;k += t)
FIRE[j][y][k] = true;
}
} void bfs(void)
{
Node first;
first.x = first.y = first.t = ;
first.e = E;
queue<Node> que;
que.push(first);
VIS[][][] = true; while(!que.empty())
{
Node cur = que.front();
que.pop(); for(int i = ;i < ;i ++)
{
Node next = cur;
next.x += UPDATE[i][];
next.y += UPDATE[i][];
next.t ++;
next.e --;
if(!next.check())
continue;
if(next.x == N && next.y == M)
{
printf("%d\n",next.t);
return ;
}
VIS[next.x][next.y][next.t] = true;
que.push(next);
}
}
puts("Bad luck!");
}
HDU 3533 Escape (BFS + 预处理)的更多相关文章
- 【搜索】 HDU 3533 Escape BFS 预处理
要从0,0 点 跑到m,n点 路上会有k个堡垒发射子弹.有子弹的地方不能走,子弹打到别的堡垒就会消失,或者一直飞出边界(人不能经过堡垒 能够上下左右或者站着不动 每步都须要消耗能量 一共同拥有en ...
- HDU 3533 Escape bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=3533 一道普通的bfs,但是由于代码实现出了bug还是拖了很久甚至对拍了 需要注意的是: 1.人不能经过炮台 2 ...
- HDU 3533 Escape(bfs)
Escape Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 3533 Escape BFS搜索
题意:懒得说了 分析:开个no[100][100][1000]的bool类型的数组就行了,没啥可说的 #include <iostream> #include <cstdio> ...
- HDU 3533 Escape(大逃亡)
HDU 3533 Escape(大逃亡) /K (Java/Others) Problem Description - 题目描述 The students of the HEU are maneu ...
- HDU 3533 Escape(BFS+预处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...
- POJ-1077 HDU 1043 HDU 3567 Eight (BFS预处理+康拓展开)
思路: 这三个题是一个比一个令人纠结呀. POJ-1077 爆搜可以过,94ms,注意不能用map就是了. #include<iostream> #include<stack> ...
- HDU3533 Escape —— BFS / A*算法 + 预处理
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 Escape Time Limit: 20000/10000 MS (Java/Others) ...
- HDU - 1430 魔板 (bfs预处理 + 康托)
对于该题可以直接预处理初始状态[0, 1, 2, 3, 4, 5, 6, 7]所有可以到达的状态,保存到达的路径,直接打印答案即可. 关于此处的状态转换:假设有初始状态为2,3,4,5,0,6,7,1 ...
随机推荐
- Could not bind factory to JNDI
将hibernate.cfg.xml中 <session-factory name="SessionFactory">的name属性去掉即可
- iOS Launch Images name
4.0 inch screen:Default-568h@2x.png (old 640x1136 ~ for iPhone 5) 4.0 inch screen: LaunchImage-700-5 ...
- 递归函数recursion
1(调用自身)递归函数是‘自己调用自己‘的函数,不管这样的调用是直接的还是间接的. 2(递归出口)因为函数不可以一直调用自己,无法停止工作,所以递归函数一定具备结束条件. http://www.cnb ...
- HDU 2795 Billboard (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一块h*w的矩形广告板,要往上面贴广告; 然后给n个1*wi的广告,要求把广告贴 ...
- VMware搭建12.0搭建Mac OS10.11详细过程
1.软件准备 1.1VMware12.0 1.2VMware增强包 1.3Mac OS10.11 cdr(相当于dmg) 1.4securable.exe 2.软件破解 2.1VMware输入序列号破 ...
- JAVA小笔记
一.system.err.println() 和 system.out.println() 有什么不同 同时使用了System.out.println与System.err.println()打印输入 ...
- 终于吧Appserv搞通了
.在学习php的时候遇到了这个问题; 1.Fatal error: Call to undefined function set_magic_quotes_runtime() in E:\App 打开 ...
- Java中字符串相等与大小比较
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- 简单的玩玩etimer <contiki学习笔记之九 补充>
这幅图片是对前面 <<contiki学习笔记之九>> 的一个补充说明. 简单的玩玩etimer <contiki学习笔记之九> 或许,自己正在掀开contiki ...
- Webserver推送技术
server推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为server主动发送信息.server发送一批数据,浏览器显示这些数据,同一时候保证与server的连接.当se ...