69-逃跑

2023-10-06 14:19
文章标签 69 逃跑

本文主要是介绍69-逃跑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述:

蒜头被困在了一个 n+1 行 m+1 列的迷宫当中,蒜头所在位置为左上角的 (0,0),他需要逃跑到位于右下角 (n,m) 的出口位置。在逃跑的过程中,蒜头只可以向东南西北四个方向移动,当然也可以选择停留在某一位置,他每移动一个单位距离需要 1 秒的时间,蒜头初始时刻的能量为 d,蒜头在迷宫当中每过 1 秒需要消耗 1 单位能量。在迷宫中有 k 个士兵,他们会朝着某一方向周期性地射击,子弹只会在整点位置射中蒜头。当蒜头被子弹射中、和士兵相遇或者能量消耗完时,他将死去。求蒜头逃离迷宫的最短时间。

输入格式

第一行包含四个整数 n,m,k,d(2n,m100;0k100;m+nd1000)

接下来 k 行每行包含一个字符 c 和四个整数 t,v,x,y(t,v100;0xn;0ym),其中 c 表示每个士兵的射击方向,使用NSWE表示上下左右四个方向,射击的周期为 t,子弹的速度为 v,士兵所在位置为 (x,y)

输出格式

输出一个整数,表示蒜头逃跑的最短时间,如果蒜头不能成功的逃离迷宫,输出Bad luck!

样例输入1
4 5 3 10
N 1 1 1 1
W 1 1 3 2
W 2 1 2 4
样例输出1
10
样例输入2
4 5 3 10
N 1 1 1 1
W 1 1 3 2
W 1 1 2 4
样例输出2
Bad luck!

代码解析:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
//some
int ans = 2000;
int n, m, k, d; // k->soldier d->energy
char dirx, mapp[maxn][maxn];
bool vis[2000][maxn][maxn];
int t, v, x, y; // T v (x, y)
int dir[5][2] = { //direction
{0, 0}, {0, 1}, {0, -1}, {-1, 0}, {1, 0} };
//dfs
void dfs(int x, int y, int t){if(t > d || t > ans) return; // 剪枝 if(x == n && y == m) { // 到达终点 if(ans > t){ //记录最小解 ans = t;}return;}vis[t][x][y] = true;for(int i = 0; i < 5; i++){int tx = x + dir[i][0];int ty = y + dir[i][1];if(tx < 0 || tx > n || ty < 0 || ty > m) // 越界 continue;if(vis[t+1][tx][ty] == false && mapp[tx][ty] != '#'){dfs(tx, ty, t+1);}}vis[t][x][y] == false;
}
//sign
void signvis(int k){for(int i = 0; i < k; i++){cin >> dirx >> t >> v >> x >> y;mapp[x][y] = '#';if(dirx == 'N'){int col_num = x; // (x,y)N方向有几行 int val_num = (col_num / v);  //发送后整点到达的点位置的个数if(val_num > 0){for(int a = 0; a <= d; a += t){for(int b = 1; b <= val_num; b++){int xx = x - b*v;vis[a+b][xx][y] = true;}                       }}   }else if(dirx == 'S'){int col_num = n - x;int val_num = (col_num / v);if(val_num > 0){for(int a = 0; a <= d; a += t){for(int b = 1; b <= val_num; b++){int xx = x + b*v;vis[a+b][xx][y] = true;}                       }}}else if(dirx == 'W'){int row_num = y;int val_num = (row_num / v); if(val_num > 0){for(int a = 0; a <= d; a += t){for(int b = 1; b <= val_num; b++){int yy = y - b*v;vis[a+b][x][yy] = true;}                       }}}else {int row_num = m - y;int val_num = (row_num / v); if(val_num > 0){for(int a = 0; a <= d; a += t){for(int b = 1; b <= val_num; b++){int yy = y + b*v;vis[a+b][x][yy] = true;}                       }}}}
} 
//main()
int main() {memset(vis, false, sizeof(vis));memset(mapp, '.', sizeof(mapp));cin >> n >> m >> k >> d;if(k != 0){signvis(k);}dfs(0,0,0);if(ans > d)cout << "Bad luck!" << endl;else cout << ans << endl;return 0;
}


这篇关于69-逃跑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/153260

相关文章

深度学习系列69:tts技术原理

tts为text-to-speech,asr为Automatic Speech Recognition,即speech-to-text。 1. 常用基础模型 下面介绍的deep voice是端到端生成语音的模型,后面两个是生成Mel谱,然后再使用vocoder生成语音的模型。 1.1 Deep voice 目前端到端的是主流,其整体流程如下图: 步骤1:语素转音素 用的比较多的是语

逃跑的拉尔夫---题目建议BFS

题目描述 Description 年轻的拉尔夫开玩笑地从一个小镇上偷走了一辆车,但他没想到的是那辆车属于警察局,并且车上装有用于发射车子移动路线的装置。 那个装置太旧了,以至于只能发射关于那辆车的移动路线的方向信息。 编写程序,通过使用一张小镇的地图帮助警察局找到那辆车。程序必须能表示出该车最终所有可能的位置。 小镇的地图是矩形的,上面的符号用来标明哪儿可以行车哪儿不行。“.”表示小镇上那

每日思考第 69 期:哪些学科值得终身投入学习?

每日思考专栏每周日更新,本期覆盖 20210308~20210314。 本期分享我这周的所思所想所见所闻。 210308:哪些学科值得终身投入学习? 致富三杠杠里:人力,金钱,边际成本为零的产品。 人力对应的学科是管理。 金钱对应的学科是金融。 边际成本为零的产品对应的学科是技术,写作,传媒。 所以在终身学习者的角度上,投身这些领域是最好的 210309:什么时候需要私域运营 在一个群里,看

LeetCode 题69~71: 二叉树的层级遍历

1. 题目描述 给定一课二叉树(如下),分别完成从上往下层级遍历、从下往上层级遍历、Z字形从上往下层级遍历: 4 / \ 2 6 / \ / \ 1 3 5 7 输出结果如下: 第一种情况:从上往下层级遍历: [ [4], [2,6], [1,3,5,7] ] 第二种情况:从下往上层级遍历: [ [1,3,5,7], [2,6], [4] ] 第三种情况:Z

NYOJ 69【数的长度】

描述     N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)? 输入 首行输入n,表示有多少组测试数据(n<10) 随后n行每行输入一组测试数据 N( 0 < N < 1000000 ) 输出 对于每个数N,输出N!的(十进制)位数。 样例输入 31332000 样例输出 111

Leetcode JAVA刷刷站(69)x的平方根

一、题目概述 二、思路方向         在Java中,计算一个非负整数x的算术平方根,并返回其整数部分,你可以使用二分查找法。这是因为平方根函数是单调递增的,所以我们可以利用二分查找在合理的时间复杂度内找到结果。 三、代码实现  public class Solution { public int mySqrt(int x) { if (x == 0) { retur

【第69课】Java安全JWT攻防Swagger自动化算法签名密匙Druid未授权

免责声明 本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。 文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具

随想录 Day 69 并查集 107. 寻找存在的路径

随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好vector<int> father = vector<int> (n, 0); // C++里的一种数组结构// 并查集初始化void init() {for (int i = 0; i < n; ++i) {father[i] = i;}

xx销售公司IT建设目标及IT规划方案(69页PPT)

方案介绍: 随着市场竞争的日益激烈,XX销售公司认识到信息化建设对于提升公司竞争力、优化业务流程、提高管理效率的重要性。次IT建设方案为XX销售公司带来了显著的业务效益和管理提升。我们将继续致力于推动公司的信息化建设,为公司的发展提供强有力的技术支撑。 部分方案内容:

100个numpy问题69-100

如何计算numpy数组的移动平均值,比如: # 计算当一个尺寸为3的窗口在一维numpy数组上移动时的平均值# 原始数组array([8, 8, 3, 7, 7, 0, 4, 2, 5,