HDU - 3533 Escape 【BFS】

基于Pixi.js的Live2D看板娘离线加载实战指南 本文详细介绍了基于Pixi.js实现Live2D看板娘离线加载的完整方案,涵盖环境搭建、模型加载、交互功能实现及常见问题解决。通过Pixi.js的硬件加速优势,开发者可在Web和Electron项目中无缝集成离线运行的Live2D模型,提升用户体验并避免网络依赖问题。 阅读详情

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533

需要注意的点:

1,人不能去有城堡的地方

2,子弹不能穿过城堡,遇到城堡子弹不会继续向前射,即使城堡在途中也不行,比如说子弹从(0, 0) 向 (0, 3)射,如果(0, 1)有城堡,子弹会消失。

3,子弹是从时间 t 开始射击的,不是从0开始。

思路就是人先走,然后遍历每一个城堡的射击时间,如果到了射击时间,就把这个城堡的子弹放入队列里面。然后注意一些限制条件即可。判断子弹是否在射击途中遇到城堡,如果没有就放入队列里面,弹出的子弹记得在那个位置减去一个子弹,表示这个子弹已经离开这个位置了。

#include <iostream>
#include <queue>
#include <cstring>
#include <string>
#include <map>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

const int INF = 0x3f3f3f3f;
const int Maxn = 4e5+10;

struct Shot {
    char dir;
    int i, j, v, t;
} shot[105];

struct Node {
    int i, j, step;
};

int N, M, gun, ener, dir[4][2] = { {1, 0}, {-1, 0},
{0, 1}, {0, -1} }, G[105][105];
bool vis[105][105];

void print() {
    for(int i = 0; i <= N; ++i) {
        for(int j = 0; j <= M; ++j)
            cout << G[i][j] << " ";
        cout << endl;
    }
    cout << endl;
}

void bfs() {
    memset(vis, 0, sizeof(vis));
    queue<Node> quP;
    queue<Shot> quS;
    Node Ntmp; Shot Stmp;
    Ntmp.i = 0; Ntmp.j = 0; Ntmp.step = 0;
    quP.push(Ntmp);
    vis[0][0] = true;

    while (!quP.empty()) {
        int cnt = quP.size(), curtime;
        while (cnt--) {
            Ntmp = quP.front(); quP.pop();
            curtime = Ntmp.step+1;

            if(Ntmp.i == N && Ntmp.j == M) {
                printf("%d\n", Ntmp.step); return;
            }

            for(int i = 0; i < 4; ++i) {
                Node now = Ntmp;
                now.i += dir[i][0]; now.j += dir[i][1];
                if(now.i < 0 || now.i > N || now.j < 0 || now.j > M
                   || vis[now.i][now.j] || G[now.i][now.j] == -1 || G[now.i][now.j] > 0) continue;
                now.step++;
                if(now.step > ener) continue;
                vis[now.i][now.j] = true;
                quP.push(now);
            }
            if(Ntmp.step+1 < ener && G[Ntmp.i][Ntmp.j] == 0) {
                Ntmp.step++; quP.push(Ntmp);
            }
        }

        for(int i = 0; i < gun; ++i)
            if(curtime % shot[i].t == 0) quS.push(shot[i]);

        cnt = quS.size();
        while(cnt--) {
            Stmp = quS.front(); quS.pop();
            if(G[Stmp.i][Stmp.j] > 0)
                G[Stmp.i][Stmp.j]--;

            Shot now = Stmp;
            if(now.dir == 'N' && now.i-now.v >= 0) {
                now.i -= now.v;
                bool ok = true;
                for(int i = Stmp.i-1; i >= now.i; --i) if(G[i][now.j] == -1) ok = false;
                if(ok) {
                    G[now.i][now.j]++;
                    quS.push(now);
                }
            }
            now = Stmp;
            if(now.dir == 'S' && now.i+now.v <= N) {
                now.i += now.v;
                bool ok = true;
                for(int i = Stmp.i+1; i <= now.i; ++i) if(G[i][now.j] == -1) ok = false;
                if(ok) {
                    G[now.i][now.j]++;
                    quS.push(now);
                }
            }
            now = Stmp;
            if(now.dir == 'W' && now.j-now.v >= 0) {
                now.j -= now.v;
                bool ok = true;
                for(int j = Stmp.j-1; j >= now.j; --j) if(G[now.i][j] == -1) ok = false;
                if(ok) {
                    G[now.i][now.j]++;
                    quS.push(now);
                }
            }
            now = Stmp;
            if(now.dir == 'E' && now.j+now.v <= M) {
                now.j += now.v;
                bool ok = true;
                for(int j = Stmp.j+1; j <= now.j; ++j) if(G[now.i][j] == -1) ok = false;
                if(ok) {
                    G[now.i][now.j]++;
                    quS.push(now);
                }
            }
        }
       // print();
    }
    printf("Bad luck!\n");
}

int main(void)
{
    while(scanf("%d%d%d%d", &N, &M, &gun, &ener) != EOF) {
        memset(G, 0, sizeof(G));
        for(int i = 0; i < gun; ++i) {
            scanf(" %c%d%d%d%d", &shot[i].dir,
                  &shot[i].t, &shot[i].v, &shot[i].i, &shot[i].j);
            G[shot[i].i][shot[i].j] = -1;
        }
       // print();
        bfs();
    }
	return 0;
}

 

STM32-TIM4-定时器中断 #include "project.h" #include "timer.h" //TIM4_Init(2000 ,72);//定时2ms /* 定时器中断的定时时间设定 定时器只需要配置时钟、TIM和NVIC即可 */ void TIM4_Init(u16 period, u16 prescaler) { NVIC_InitTypeDef NVIC_InitStructure; TIM_... 阅读详情

相关推荐

NPU性能榨取手把手教程:RK3588上YOLOv5s多线程部署与120FPS极限探索

RK3588 YOLOv5s多线程部署优化指南 本教程深入解析RK3588芯片上YOLOv5s模型的高性能多线程部署方案。RK3588作为瑞芯微旗舰AIoT芯片,内置三核NPU(6TOPS算力)和硬件加速器(RGA/VPU),为AI推理提供强大支持。通过线程池技术,我们将视频处理的读取、推理、后处理等环节解耦并行,显著提升系统吞吐量。教程详细介绍了从PyTorch到RKNN格式的模型转换流程、INT8量化方法,以及基于RKNN C++ SDK的YOLOv5推理核心实现,帮助开发者最大化发挥RK3588的AI

LXY_LOVE36的博客 951

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的博客 326

大模型微调部署实战及类GPT工具的高效使用

本文主要介绍了专栏《大模型微调部署实战及类GPT工具的高效使用》的核心内容,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 专栏亮点 3. 你的收获 4. 详细目录

herosunly的博客 22万+

EscapeHDU - 3533BFS + 模拟)

一.题目链接: 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 的初始位...

The___Flash的博客 316

HDU - 3533Escapebfs

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

Sky丨Star的博客 139

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!荣耀之路! 4455

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

HDU3533EscapeBFS+预处理)

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

Stark_industry 241

HDU 3533 EscapeBFS

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

IuSpet的博客 382

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): 1792Accepte...

weixin_30325793的博客 71

HDU3533 Escape BFS

HDU3533 Escape BFS

htrdchh的博客 246

HDU 3533 Escape 预处理+bfs

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

WA是一笔财富 397

HDU 3533 Escapebfs

Escape Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2597    Accepted Submission(s): 754   Problem Description The students of the HEU a...

Emiya丶的博客 420

hdu 3533 Escape

题目链接 只需要看当人位于某点的时候,其四个方向是否有炮塔朝人的方向攻击,再看子弹是否刚好位于这个坐标(第一次和周期性到达)。用vis三维数组标记搜索。 #include&amp;lt;cstdio&amp;gt; #include&amp;lt;queue&amp;gt; #include&amp;lt;cstring&amp;gt; using namespace std; const int dir[5][2]={...

M_Lter的博客 287

hdu 3533 搜索+预处理

广搜

zxf654073270的专栏 1142

HDU 3533 简单bfs 主要是MLE问题

要求:人从(0,0)到(m,n),人有d个能量,每秒消耗一点能量,每秒可以上下左右走一格或待在原地不动。网格中会有炮台,炮台向上下左右的某个方向射击,每t秒射击一次,子弹速度为v米每秒。问人是否可以到达目的地,若可以,求最短时间。 方法:简单bfs 1.注意使用vis[x][y][time1]标记。 2.一直MLE是因为使用了int vis[105][105][1005],改成bool vi...

Irving0323的博客 667

Escape HDU - 3533

题目链接: Escape HDU - 3533 写这道题之前我一直有个坏毛病,没有重视,就是标记数组,一般我不会很在意到底是开int还是bool,可能是int打的顺手,所以经常会开int型的标记数组,直到今天,一直超内存,还以为是自己结构体太占内存,就默默把结构体改成数组,然后还是超了,后来同学收内存超了一般是数组开大了,然后注意到,自己开的几个数组,发现有一个可以开成bool型不需要int...

DeathYmz的博客 753

()HDU 1548 BFS 广度优先搜索

#include #include using namespace std; int flag[210],data[210]; //flag用来标记当前楼梯所在层数是否已经搜索过。如果已经搜索过就不再加入队列中。 //避免重复的搜索 int N,A,B; struct Node{ int cur;//当前所在的楼梯层 int num;//次数 }; //BFS int sea

Lemon_Chen 975

HDU3533Escape(BFS)错了十多次

Escape Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 341    Accepted Submission(s): 94 Problem Description The students of the

青山绿水之辈 专栏 1836

matlab_相关干涉仪测向方法_以5元圆天线阵列为接收阵列,计算两元间的相位差,形成标准库,并通过相关的方式测得信号来波方向

matlab_相关干涉仪测向方法_以5元圆天线阵列为接收阵列,计算两元间的相位差,形成标准库,并通过相关的方式测得信号来波方向The program is matlab simulation of correlation interferometer direction finding method. Taking the 5-element circular antenna array as the receiving array, the phase difference between the two elements is calculated to form a standard library, and the direction of the signal is measured by correlation

postgresql-42.3.1-API文档-中文版.zip

赠送jar包:postgresql-42.3.1.jar;赠送原API文档:postgresql-42.3.1-javadoc.jar;赠送源代码:postgresql-42.3.1-sources.jar;赠送Maven依赖信息文件:postgresql-42.3.1.pom;包含翻译后的API文档:postgresql-42.3.1-javadoc-API文档-中文(简体)版.zip;Maven坐标:org.postgresql:postgresql:42.3.1;标签:postgresql、中文文档、jar包、java;使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

上一篇: HDU - 3567 Eight II 【bfs打表+映射+康托展开】
下一篇: HDU - 1560 DNA sequence 【迭代加深】
Y390d
博客等级 码龄9年 11粉丝 165原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值