题意:懒得说了

分析:开个no[100][100][1000]的bool类型的数组就行了,没啥可说的

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <queue>
#include <set>
using namespace std;
const int N=;
int n,m,k,d,l;
struct node
{
char s[];
int x,y,v,t;
} o[N];
bool mp[N][N];
bool no[N][N][];
void No(int pos)
{
l=;
for(int i=o[pos].x-; i>=; --i)
if(mp[i][o[pos].y])
{
l=i+;
break;
}
for(int i=; i<=d; i+=o[pos].t)
{
int now=o[pos].x-o[pos].v;
for(int j=i+; j<=d&&now>=l; ++j,now-=o[pos].v)
no[now][o[pos].y][j]=;
}
}
void S(int pos)
{
l=n;
for(int i=o[pos].x+; i<=n; ++i)
if(mp[i][o[pos].y])
{
l=i-;
break;
}
for(int i=; i<=d; i+=o[pos].t)
{
int now=o[pos].x+o[pos].v;
for(int j=i+; j<=d&&now<=l; ++j,now+=o[pos].v)
no[now][o[pos].y][j]=;
}
}
void W(int pos)
{
l=;
for(int i=o[pos].y-; i>=; --i)
if(mp[o[pos].x][i])
{
l=i+;
break;
}
for(int i=; i<=d; i+=o[pos].t)
{
int now=o[pos].y-o[pos].v;
for(int j=i+; j<=d&&now>=l; ++j,now-=o[pos].v)
no[o[pos].x][now][j]=;
}
}
void E(int pos)
{
l=m;
for(int i=o[pos].y+; i<=m; ++i)
if(mp[o[pos].x][i])
{
l=i-;
break;
}
for(int i=; i<=d; i+=o[pos].t)
{
int now=o[pos].y+o[pos].v;
for(int j=i+; j<=d&&now<=l; ++j,now+=o[pos].v)
no[o[pos].x][now][j]=;
}
}
struct asd
{
int x,y,w;
} a,e;
int dx[]= {,,,,-};
int dy[]= {,-,,,};
queue<asd>q;
int bfs()
{
while(!q.empty())q.pop();
q.push(asd {,,});
no[][][]=;
while(!q.empty())
{
a=q.front();
q.pop();
for(int i=; i<; ++i)
{
e.x=a.x+dx[i];
e.y=a.y+dy[i];
e.w=a.w+;
if(e.x<||e.x>n||e.y<||e.y>m)continue;
if(e.w>d)continue;
if(mp[e.x][e.y])continue;
if(no[e.x][e.y][e.w])continue;
if(e.x==n&&e.y==m)return e.w;
no[e.x][e.y][e.w]=;
q.push(e);
}
}
return -;
}
int main()
{
while(~scanf("%d%d%d%d",&n,&m,&k,&d))
{
memset(mp,,sizeof(mp));
memset(no,,sizeof(no));
for(int i=; i<=k; ++i)
{
scanf("%s%d%d%d%d",o[i].s,&o[i].t,&o[i].v,&o[i].x,&o[i].y);
mp[o[i].x][o[i].y]=;
}
int ans=;
if(mp[][]||mp[n][m])
ans=-;
if(ans!=-)
for(int i=; i<=k; ++i)
{
if(o[i].s[]=='N')No(i);
else if(o[i].s[]=='S')S(i);
else if(o[i].s[]=='W')W(i);
else E(i);
}
if(ans!=-)ans=bfs();
if(ans==-)printf("Bad luck!\n");
else printf("%d\n",ans);
}
return ;
}

HDU 3533 Escape BFS搜索的更多相关文章

  1. 【搜索】 HDU 3533 Escape BFS 预处理

    要从0,0 点 跑到m,n点  路上会有k个堡垒发射子弹.有子弹的地方不能走,子弹打到别的堡垒就会消失,或者一直飞出边界(人不能经过堡垒 能够上下左右或者站着不动 每步都须要消耗能量  一共同拥有en ...

  2. HDU 3533 Escape bfs 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=3533 一道普通的bfs,但是由于代码实现出了bug还是拖了很久甚至对拍了 需要注意的是: 1.人不能经过炮台 2 ...

  3. HDU 3533 Escape (BFS + 预处理)

    Escape Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  4. HDU 3533 Escape(bfs)

    Escape Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. HDU 3533 Escape(大逃亡)

    HDU 3533 Escape(大逃亡) /K (Java/Others)   Problem Description - 题目描述 The students of the HEU are maneu ...

  6. HDU 3533 Escape(BFS+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=10 ...

  7. HDU 1495 非常可乐 BFS 搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...

  8. HDU 1495 非常可乐 BFS搜索

    题意:有个为三个杯子(杯子没有刻度),体积为s,n,m,s=m+n, 刚开始只有体积为s的杯子装满可乐,可以互相倒,问你最少的次数使可乐均分,如果没有结果,输出-1; 分析:直接互相倒就完了,BFS模 ...

  9. hdu 1240:Asteroids!(三维BFS搜索)

    Asteroids! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

随机推荐

  1. 【BZOJ 2301】[HAOI2011]Problem b

    Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...

  2. Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)

    最近在做项目时用到了定时执行的js方法,setInterval与setTimeout时间长了不用有些生疏了,所以自己总结了一下,记下来,以便以后使用. Document自带的方法: 循环执行:var ...

  3. WinForm控件选择器

    jQuery和Css的控件选择器用起来非常畅快,相信用过的人都会有这种感觉,而WinForm则是通过Name来实现窗体中控件的选择,在选择单个控件的时候是很方便,但是当选择具有一类特征的控件时,则显得 ...

  4. 1022: [SHOI2008]小约翰的游戏John - BZOJ

    Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取 ...

  5. Eclipse编辑jsp、js文件时,经常出现卡死现象解决汇总

    使用Eclipse编辑jsp.js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲.将所有用过的方法罗列如下: 1.取消验证 windo ...

  6. C#学习笔记(一)

    1.cmd运行devenv启动VS. 2.解决方案:公司 项目:部门 类:员工 3.右边的解决方案管理器:会自动隐藏,想让他固定的话,就点击关闭按钮中间的“自动隐藏”:可以拖动到上下左右,当出现阴影的 ...

  7. [转载]Unity3D 访问Access数据库

    在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来.写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过 ...

  8. 【技术贴】删除360快捷搜索 ctrl+ctrl

    恶心的功能,这么变态!如何删除360快捷键ctrl,桌面跳出360搜索怎么办?360 ctrl 删除 卸载方法: 桌面右下角,在360图标上右键点击设置,进入设置中心. 把 [开启快捷搜索功能,双击C ...

  9. kafka.utils.Utils阅读

    这个类实现了一些工具性质的方法,正如其名. 记下自己觉得有意思的方法: readFileAsString(path: String, charset: Charset = Charset.defaul ...

  10. Stretch a row if data overflows in jasper reports

    My band stretches if necessary with the following conditions, I do not know yours. I have started wi ...