news 2026/8/7 20:48:23

每日一练:流星雨

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
每日一练:流星雨

题目描述

贝西听说一场非凡的流星雨即将来临;报告称这些流星将撞击地球并摧毁它们所碰到的任何东西。为了安全,她发誓要找到一个安全的位置(一个从未被流星摧毁的地方)。她目前在坐标平面的原点放牧,想要移动到一个新的、更安全的位置,同时避免在途中被流星摧毁。

报告称将会有 M 颗流星将会撞击,其中第 i 颗流星将在时间 Ti 撞击点 (Xi, Yi)。每颗流星会摧毁它撞击的点以及四个直线相邻的格点。

贝西在时间 0 从原点出发,可以在第一象限内以每秒一个距离单位的速度移动到任何尚未被流星摧毁的(通常是 4 个)相邻直线点。她在任何时间都不能位于被摧毁的点上。

确定贝西到达安全地点所需的最短时间。

输入格式

第一行一个整数M。

接下来M行,每行包含三个以空格分隔的整数:Xi, Yi 和 Ti。

输出格式

贝西到达安全地点所需的最短时间,或者如果不可能则输出 -1。

样例输入

4 0 0 2 2 1 2 1 1 2 0 3 5

样例输出

5

数据范围

1 <= M <= 50000,0 <= Xi <= 300,0 <= Yi <= 300,0 <= Ti <= 1000。

题解

#include <stdio.h> #include <stdlib.h> // 定义地图最大范围。虽然输入只有300,但冲击波会到301, // 且贝西可能需要绕路,所以开到405是安全的。 #define MAX_COORD 405 #define INF 99999999 // map[x][y] 存储该坐标变成焦土的最早时间 int map[MAX_COORD][MAX_COORD]; // visited[x][y] 标记是否已经访问过该点,防止BFS走回头路 int visited[MAX_COORD][MAX_COORD]; // 定义BFS队列的节点结构 typedef struct { int x; int y; int time; } Node; // 简单的队列实现 (静态数组足够大即可) Node queue[MAX_COORD * MAX_COORD]; int head = 0; int tail = 0; // 方向数组:上下左右 int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; int main() { int M; if (scanf("%d", &M) != 1) return 0; // 1. 初始化地图 // 默认所有点都是安全的(设为无限大) for (int i = 0; i < MAX_COORD; i++) { for (int j = 0; j < MAX_COORD; j++) { map[i][j] = INF; visited[i][j] = 0; // 0表示未访问 } } // 2. 读取流星数据,预处理地图危险时间 for (int i = 0; i < M; i++) { int x, y, t; scanf("%d %d %d", &x, &y, &t); // 更新流星中心点 // 只有当新的时间 t 比当前记录的时间更早时才更新 if (t < map[x][y]) { map[x][y] = t; } // 更新四个相邻点 for (int k = 0; k < 4; k++) { int nx = x + dx[k]; int ny = y + dy[k]; // 确保不越界 (只检查 >=0,上限由数组大小隐式保护,流星只砸到300) if (nx >= 0 && ny >= 0) { if (t < map[nx][ny]) { map[nx][ny] = t; } } } } // 3. 开始 BFS 寻找最短路径 // 特殊情况:如果起点在时刻0就被炸了,直接无法开始 if (map[0][0] == 0) { printf("-1\n"); return 0; } // 将起点加入队列 queue[tail].x = 0; queue[tail].y = 0; queue[tail].time = 0; tail++; visited[0][0] = 1; while (head < tail) { // 取出队首元素 Node curr = queue[head++]; // 【判断胜利条件】 // 如果当前点 map 值为 INF,说明这里永远不会被炸,就是安全点 if (map[curr.x][curr.y] == INF) { printf("%d\n", curr.time); return 0; } // 尝试往四个方向走 for (int i = 0; i < 4; i++) { int nx = curr.x + dx[i]; int ny = curr.y + dy[i]; int n_time = curr.time + 1; // 检查边界 if (nx >= 0 && ny >= 0 && nx < MAX_COORD && ny < MAX_COORD) { // 检查是否访问过 if (!visited[nx][ny]) { // 【核心逻辑】 // 只有当 "到达时间" < "该点被炸毁的时间" 时,才是安全的移动 if (n_time < map[nx][ny]) { visited[nx][ny] = 1; queue[tail].x = nx; queue[tail].y = ny; queue[tail].time = n_time; tail++; } } } } } // 如果队列空了还没找到安全点 printf("-1\n"); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 23:01:26

Day 38 - Dataset 和 DataLoader

在深度学习任务中&#xff0c;数据处理是至关重要的一环。面对大规模数据集&#xff0c;显存往往无法一次性存储所有数据&#xff0c;因此需要采用分批训练&#xff08;Batch Training&#xff09;的策略。PyTorch 提供了两个核心工具类来解决数据加载和预处理的问题&#xff1…

作者头像 李华
网站建设 2026/8/7 18:18:10

[C#][winform]基于yolov11的打架行为检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】在社会治安管理朝着智能化、精细化方向加速推进的重要阶段&#xff0c;及时且精准地监测公共场所中的打架行为&#xff0c;已然成为维护社会秩序稳定、保障公民人身安全以及提升城市治理水平的核心任务之一。公共场所作为人员密集且流动频繁的区域&#xff0c;其环…

作者头像 李华
网站建设 2026/8/7 10:47:45

2022年TRC SCI1区TOP,基于随机分形搜索算法的多无人机四维航迹优化自适应冲突消解方法,深度解析+性能实测

目录1.摘要2.基于风险的4D航线与飞行冲突建模3.冲突解决和4D路线优化4.随机分形搜索算法5.结果展示6.参考文献7.代码获取8.算法辅导应用定制读者交流1.摘要 随着无人航空系统在城市低空的快速发展&#xff0c;安全高效的低空交通管理亟需突破。飞前四维航迹优化是实现冲突探测…

作者头像 李华
网站建设 2026/8/6 23:06:58

《智能世界2035》——华为预测十年以后智能世界的模样

导语&#xff1a;如果回到十年前&#xff0c;你会做什么&#xff1f;如果你知道十年后的样子&#xff0c;现在你会做什么&#xff1f;如果把 2025 比作 AI 的“青春期”&#xff0c;那么 2035 将是它真正走向社会的“成人礼”。华为《智能世界2035》 用130 页的战略报告介绍了 …

作者头像 李华
网站建设 2026/8/7 11:30:52

FLAC3D随机裂隙建模:从基础到复杂网络

FLAC3D随机裂隙&#xff0c;fractureFLAC3D作为一款功能强大的离散元数值模拟软件&#xff0c;在岩石力学领域有着广泛的应用。其中&#xff0c;随机裂隙网络的建模是岩石力学研究中的重要一环&#xff0c;因为它能够更好地反映实际岩石中的复杂结构。本文将介绍如何在FLAC3D中…

作者头像 李华
网站建设 2026/8/6 23:43:58

终极指南:TUnit服务虚拟化测试实践

终极指南&#xff1a;TUnit服务虚拟化测试实践 【免费下载链接】TUnit A modern, fast and flexible .NET testing framework 项目地址: https://gitcode.com/GitHub_Trending/tun/TUnit 在当今的软件开发中&#xff0c;你是否经常遇到这样的困扰&#xff1a;测试因为外…

作者头像 李华