Escape (HDU - 3533,BFS + 模拟)

传感器:MQ-5燃气模块测量燃气值(底部附代码) 本篇文章介绍使用MQ-5燃气模块测量燃气值,CPU还是选择单片机,MQ-5主要使用的技术为ADC,燃气对于单片机来说是模拟信号,需要转换为数字信号,再经过相关计算公式将燃气模拟值转换成对应的燃气数值,便于人们方便查看。例如家庭使用燃气模块测量燃气值,如果燃气值超过一定的范围,可以外设一个报警装置,保证家庭的生命安全。(1)ADC(analog to digital converter)即模数转换器,它可以将模拟信号转换为数字信号。按照其转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。STM32F1 阅读详情

一.题目链接:

HDU-3533

二.题目大意:

第一行 4 个整数 m,n,k,d.

m × n 是地图大小,有 k 个炮塔.

d 是初始生命值,每秒消耗 1 点生命值.

之后 k 行.

每行有 ch,t,v,x,y.

ch = {'N', 'S', 'W', 'E'}

t 为该炮塔发射炮弹的间隔时间.

v 为该炮台发射子弹的速度.

x,y 为该炮台的坐标.

A 的初始位置在 (0, 0),出口在 (m, n).

若 A 生命值为 0 或 被子弹打中,则 A 死亡.

ps:炮台可挡住其他子弹.

三.分析:

直接 BFS + 模拟...

详见代码.

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-6
#define pi acos(-1.0)
#define ll long long int
using namespace std;

const int M = (int)1e2;
const int inf = 0x3f3f3f;

struct node1
{
    char ch;
    int t;
    int v;
} castle[M + 5][M + 5];

struct node2
{
    int x;
    int y;
    int step;
};

bool vis[M * 10 + 5][M + 5][M + 5];

int Move[5][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {0, 0}};

int bfs(int m, int n, int d)
{
    struct node2 p, t;
    p.x = p.y = p.step = 0;
    vis[0][0][0] = 1;
    queue <node2> q;
    q.push(p);
    while(!q.empty())
    {
        p = q.front();
        q.pop();
        if(p.x == m && p.y == n)
            return p.step;
        for(int i = 0; i < 5; ++i)
        {
            t = p;
            t.x += Move[i][0];
            t.y += Move[i][1];
            t.step++;
            if(t.x < 0 || t.x > m || t.y < 0 || t.y > n)
                continue;
            if(!castle[t.x][t.y].t && !vis[t.step][t.x][t.y] && t.step <= d)
            {
                bool flag = 1;
                for(int j = t.x - 1; j >= 0; --j)///查找上方的炮台
                {
                    if(castle[j][t.y].v && castle[j][t.y].ch == 'S')///炮台在上方 且 向下方发射子弹
                    {
                        int dis = t.x - j;
                        if(dis % castle[j][t.y].v)///若所在位置无法被子弹速度整除
                            break;
                        int times = t.step - dis / castle[j][t.y].v;///已用时间 - 子弹从出点到达此点的时间
                        if(times % castle[j][t.y].t == 0)
                        {
                            flag = 0;
                            break;
                        }
                    }
                    else if(castle[j][t.y].v && castle[j][t.y].ch != 'S')///帮 A 挡住子弹
                        break;
                }
                if(!flag)
                    continue;
                for(int j = t.x + 1; j <= m; ++j)
                {
                    if(castle[j][t.y].v && castle[j][t.y].ch == 'N')
                    {
                        int dis = j - t.x;
                        if(dis % castle[j][t.y].v)
                            break;
                        int times = t.step - dis / castle[j][t.y].v;
                        if(times % castle[j][t.y].t == 0)
                        {
                            flag = 0;
                            break;
                        }
                    }
                    else if(castle[j][t.y].v && castle[j][t.y].ch != 'N')
                        break;
                }
                if(!flag)
                    continue;
                for(int j = t.y - 1; j >= 0; --j)
                {
                    if(castle[t.x][j].v && castle[t.x][j].ch == 'E')
                    {
                        int dis = t.y - j;
                        if(dis % castle[t.x][j].v)
                            break;
                        int times = t.step - dis / castle[t.x][j].v;
                        if(times % castle[t.x][j].t == 0)
                        {
                            flag = 0;
                            break;
                        }
                    }
                    else if(castle[t.x][j].v && castle[t.x][j].ch != 'E')
                        break;
                }
                if(!flag)
                    continue;
                for(int j = t.y + 1; j <= n; ++j)
                {
                    if(castle[t.x][j].v && castle[t.x][j].ch == 'W')
                    {
                        int dis = j - t.y;
                        if(dis % castle[t.x][j].v)
                            break;
                        int times = t.step - dis / castle[t.x][j].v;
                        if(times % castle[t.x][j].t == 0)
                        {
                            flag = 0;
                            break;
                        }
                    }
                    else if(castle[t.x][j].v && castle[t.x][j].ch != 'W')
                        break;
                }
                if(!flag)
                    continue;
                vis[t.step][t.x][t.y] = 1;
                q.push(t);
            }
        }
    }
    return -1;
}

void init(int m, int n)
{
    for(int i = 0; i <= M * 10; ++i)
    {
        for(int j = 0; j <= m; ++j)
        {
            for(int k = 0; k <= n; ++k)
            {
                vis[i][j][k] = 0;
                castle[j][k].t = castle[j][k].v = 0;
            }
        }
    }
}

int main()
{
    int m, n, k, d;
    while(~scanf("%d %d %d %d", &m, &n, &k, &d))
    {
        init(m, n);
        char ch;
        int t, v, x, y;
        for(int i = 0; i < k; ++i)
        {
            getchar();
            scanf("%c %d %d %d %d", &ch, &t, &v, &x, &y);
            castle[x][y].ch = ch;
            castle[x][y].t = t;
            castle[x][y].v = v;
        }
        int ans = bfs(m, n, d);
        if(~ans)
            printf("%d\n", ans);
        else
            printf("Bad luck!\n");
    }
    return 0;
}

 

STM32F103C8T6+HX711:手把手教你打造高精度智能体重秤(附完整代码) 本文详细介绍了如何使用STM32F103C8T6微控制器和HX711称重模块构建高精度智能体重秤,涵盖硬件选型、电路设计、软件开发到无线数据传输的全过程。通过完整的代码示例和校准方法,帮助开发者快速实现毕业设计或商业项目,打造具备物联网功能的智能健康设备。 阅读详情

相关推荐

RK3566开发板实战:YT8512C百兆网卡调试全记录(附DTS配置避坑指南)

本文详细记录了RK3566开发板上YT8512C百兆以太网卡的调试全过程,包括硬件信号检测、DTS配置优化及常见错误排查。特别针对DTS配置中的关键参数和避坑指南进行了深入解析,为开发者提供实用的调试技巧和经验分享。

weixin_29189381的博客 273

HDU 3533

H #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt; #include &amp;lt;queue&amp;gt; #include &amp;lt;algorithm&amp;gt; using namespace std; #define ads(x) (x&amp;lt;0?-x:x) int n, m, k, life; int to[5][2]

weixin_44012186的博客 329

一键转换B站M4S缓存为MP4:无需FFMPEG命令的简易工具

本文介绍了一款专为B站用户设计的绿色工具,可将缓存的M4S视频和音频文件一键转换为通用MP4格式。该工具完全图形化操作,无需学习复杂的FFmpeg命令,解决了普通用户处理B站缓存视频的痛点。文章详细讲解了从下载、配置到转换的完整流程,并提供了常见问题排查与安全使用建议,帮助用户高效、安全地管理离线视频内容。

joy55的博客 480

HDU - 3533 Escape 【BFS】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 需要注意的点: 1,人不能去有城堡的地方 2,子弹不能穿过城堡,遇到城堡子弹不会继续向前射,即使城堡在途中也不行,比如说子弹从(0, 0) 向 (0, 3)射,如果(0, 1)有城堡,子弹会消失。 3,子弹是从时间 t 开始射击的,不是从0开始。 思路就是人先走,然后遍历每一个城堡的射...

Y390d的博客 218

DeepSeek+Coze扣子搭建智能体(保姆级教程)

DeepSeek+Coze扣子搭建智能体(保姆级教程)

yizhen91y的博客 1万+

GitLab中国区注册终极解决方案:绕过+86手机验证的实战技巧(2023最新)

本文详细解析了GitLab中国区注册时绕过+86手机验证的三种实战技巧,包括开发者工具调试方案、使用国际号码的变通方案以及本地化部署替代方案。通过技术分析和实践验证,帮助开发者顺利注册GitLab账号,提升团队协作效率。

rl6adventurer的博客 1499

【HDU - 3533】Escape(bfs)

Escape Descriptions: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y问这个人能不能安全到达终点要求:1.人不能到达炮塔所在的坐标2.炮塔会挡住子弹3.途中遇到子弹是安全的,但是人如果停在这个坐标,而子弹也刚好到这个坐标,人就被射死4.人可以选择停止不动 Input 对于每个测试用例,...

Sky丨Star的博客 141

python爬虫抖音 个人资料 仅供学习参考 切勿用于商业

本文仅供学习参考 切勿用于商业 本次爬取使用fiddler+模拟器(下载抖音APP)+pycharm 1. 下载最新版本的fiddler(自行百度下载),以及相关配置 1.1.依次点击,菜单栏-Tools-Options-HTTPS,如图1红框打钩,HTTPS旁边Connections配置,如图2红框打钩 1.2.再次点击HTTPS栏,点击Actions选择第二个…to ...

dbva7063的博客 1491

HDU3533:Escape(BFS)

Problem Description The students of the HEU are maneuvering for their military training. The red army and the blue army are at war today. The blue army finds that Little A is the spy of the red ar

ACM!荣耀之路! 4462

Adams与Matlab联合仿真入门:从零搭建你的第一个动力学模型

本文为Adams与Matlab联合仿真新手提供了一份详尽的入门指南。文章从软件环境配置、版本兼容性检查讲起,逐步演示了如何在Adams中构建单摆动力学模型并定义输入输出接口,以及在Matlab/Simulink中搭建控制回路。通过一个完整的受控单摆实例,手把手教你完成从模型导出、模块生成到执行联合仿真的全流程,帮助你快速搭建并运行第一个联合仿真模型,实现动力学与控制系统的协同验证。

g5h6i7j的博客 699

Halcon深度图转点云实战:从XYZ映射到3D可视化全解析

本文详细解析了如何使用Halcon将深度图转换为点云图,涵盖从XYZ映射到3D可视化的全流程。通过实战案例和代码示例,介绍了深度图预处理、xyz_to_object_model_3d核心转换及3D可视化技巧,适用于工业检测、三维重建等场景。

stem5的博客 766

HDU-3533-Escape(BFS)

Problem Description The students of the HEU are maneuvering for their military training. The red army and the blue army are at war today. The blue army finds that Little A is the spy of the red ar

青春无悔 1395

基于Slim-Neck架构的YOLOv11轻量化特征融合方案(实现超轻量级与高精度的双重突破)

购买即可解锁800+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,每日更新。

m0_64661770的博客 250

HDU 3533 Escape(BFS+模拟)两种思路

EscapeTime Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2400    Accepted Submission(s): 693Problem DescriptionThe students of the HEU are maneuv...

Rvelamen的博客 442

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

HDU - 3533 Escape

举个栗子:子弹以每秒3格的速度从(0,3)射向(0,0),同时小A以每秒1格从(0,0)逃往(0,1),这时小A能活下来。对于判重,需要定义vis[x][y][time]表示点(x,y)在time时刻的访问状态,这里需要注意的是这个数组不能开int,只能开bool,虽然效果好像是一样的,但是开int会爆内存,因为int占4byte,而bool只占1byte。一个人从(0,0)跑到(n,m),只有d点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y。

2301_77449683的博客 691

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HDU 3533 Escape(大逃亡)

HDU 3533 Escape(大逃亡) TimeLimit:20000/10000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others) ProblemDescription - 题目描述   The students of the HEU are maneuvering for th...

291

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HDU 3533 Escape(BFS)

题意 ​ ​ A从棋盘(0,0)前往(m,n)每回合消耗一点能量,地图上有一些碉堡,碉堡周期性发射子弹,子弹沿直线运动,每回合在棋盘上一点,碉堡可以拦住子弹的运动,子弹互相不影响,A在移动过程中不能和碉堡子弹处于同一点,输出最短到终点时间,无法到达输出“Bad luck!” 思路 ​ ​ 棋盘上最短路,考虑用BFS或者A*,这题BFS足够 ​ ​ 难点在于每走一到一点,要计算在当前时刻该点有无子弹...

IuSpet的博客 387

HDU3533Escape(BFS+预处理)

题目在这:传送门 分析:A要从(0,0)跑到(m,n)处,地图各个地方有炮台会发射子弹,A必须要不中弹而且能量用完之前到达(m,n),可以的话输出需要的时间,不行就输出Bad luck! 思路:求最短路径用BFS,而这题情况条件比较多,先要多子弹可能会出现的位置和时间做一个预处理,就先标记好,在BFS的时候绕开子弹 AC代码: #include&lt;iostream&gt; #include&l...

Stark_industry 244

HDU 3533 BFS

HDU 3533 题意: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y 问这个人能不能安全到达终点 要求:  1.人不能到达炮塔所在的坐标 2.炮塔会挡住子弹 3.途中遇到子弹是安全的,但是人如果停在这个坐标,而子弹也刚好到这个坐标,人就被射死 4.人可以选择停止不动 思路:其实不难,

小菜鸟。。 283

HDU 3533 Escape 预处理+bfs

传送门:HDU3533 题意: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消耗一点,在图中有k个炮塔,给出炮塔的射击方向c,射击间隔t,子弹速度v,坐标x,y问这个人能不能安全到达终点要求:  1.人不能到达炮塔所在的坐标 2.炮塔会挡住子弹 3.途中遇到子弹是安全的,但是人如果停在这个坐标,而子弹也刚好到这个坐标,人就被射死(即人只会在整数秒死) 4.人可以选择停止不动思路:先把所

WA是一笔财富 402

【HDU 3533】Escape(BFS)

DescriptionThe students of the HEU are maneuvering for their military training. The red army and the blue army are at war today. The blue army finds that Little A is the spy of the red army, so Littl

Ice_Confuse 484

HDU3533 Escape —— BFS / A*算法 + 预处理

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 Escape Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1792    Accepted Submis

A man can be destroyed, but not defeated. 587

hdu3533Escape

hdu3533 Escape Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1459    Accepted Submission(s): 407 Problem Description The students o

active2489595970的博客 346

BFS-hdu-3533-Escape

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意: 给一个m*n的矩阵方格,有k门大炮,每门大炮以t为周期向c方向发射炮弹,炮弹速度为v. 求从(0,0)到(m,n)位置最短的时间,中间不能被炮弹打到,时间不能超过d. 解题思路: 预处理好后就是简单的BFS。 先预处理每个点能够被炮弹射击的所有时刻,然后用vis[

cc_again的专栏 1219

HDU 3533 —— Escape

原题:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题意:从(0 0)走到(n m),四个方向或者选择不走,每次走或不走都要消耗一个能量,问最少消耗多少能量,初始能量为d; 有k个炮台,c  t  v  x  y 分别表示炮台发射的方向,每次发射的时间间隔,炮火的速度,炮台的坐标; 有炮台的地方不能走,当某个时刻人和炮火在同一个坐标时就死了,途

0x3f3f3f3f 468
上一篇: Eight II (HDU - 3567,BFS 打表 + 思维)
下一篇: DNA sequence (HDU - 1560,IDA* + 小小思维)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值