Meteor Shower

2024-01-08 15:08
文章标签 meteor shower

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

Meteor Shower

Bessie听说一场非凡的流星雨即将来临; 据报道,这些流星将坠入地球并摧毁他们击中的任何东西。为了安全起见,她发誓要找到一个安全的地方(一个永远不被流星摧毁的地方)。她目前正在坐标平面的原点放牧,并希望搬到一个新的,更安全的地方,同时避免被沿途的流星摧毁。

据报告说,M颗流星(1≤ M ≤50000)将会坠入,流星i将在时间Ti(0 ≤ Ti ≤1,000)撞击点(Xi, Yi) (0 ≤ Xi ≤ 300; 0 ≤ Yi ≤ 300) 。每颗流星都会破坏它所撞击的点以及四个直线相邻的格点。

Bessie在时间0离开原点并且可以在第一象限中以每秒一个距离单位的速率平行于轴方向行进到达尚未被流星破坏的任何(通常是4个)相邻直线点。她到达一个点的时间不能大于或等于该点被摧毁的时间点。

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

Input

第1行:单个整数:M
第2行~M +1行:第i + 1行包含三个以空格分隔的整数:Xi, Yi, and Ti

Output

第1行:Bessie到达安全地点所需的最短时间,如果不可能,则为-1。

Sample Input

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

Sample Output

5

C++编写:

这道题的相邻直线点可能有点难以理解,此处简单地解释一下,假如在某一时刻一颗流星撞击点(3,3),那么该时间点被摧毁的地方有五个——(3,3)、(3,2)、(3,4)、(2,3)、(4,3),其他的应该没有什么难理解的了,下面是代码:

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;const int INF=0x3f3f3f3f;
const int MAX_M=50010;
const int MAX_N=310;int map[MAX_N][MAX_N];
int d[MAX_N][MAX_N];
int dx[5]={1,0,-1,0,0},dy[5]={0,1,0,-1,0};
int m,x,y,t;  typedef pair<int,int> P;struct Meteor {int x;int y;int t;
} meteors[MAX_M];bool compare (Meteor a, Meteor b) 
{if (a.t < b.t)   return true;else   return false;
}bool check(int x,int y)
{if(x>=0 && x<MAX_N && y>=0 && y<MAX_N)   return true;else  return false;
}int bfs()
{queue<P> que;if(map[0][0] == 0)    return -1;else if(map[0][0] == INF)     return 0;que.push(P(0,0));while(que.size()){P p=que.front();que.pop();int px=p.first,py=p.second;if (px >= MAX_N || py >= MAX_N)  continue;      //这句话仅用于一种保护措施,基本不可能执行这行代码for(int i=0;i<4;i++){int nx=px+dx[i],ny=py+dy[i];if(check(nx,ny)){if(map[nx][ny] == INF)      //该点永远不会被摧毁{return ++d[px][py];}if(d[px][py]+1 < map[nx][ny] && !d[nx][ny])    //在该点被摧毁之前到达并且这个点还没有被走过{                                              //这里有点绕,这个点被走过了之后就不能再回来了吗que.push(P(nx, ny));                       //这个点早晚要被摧毁,同时我们要求的是最短时间d[nx][ny] = d[px][py] + 1;                 //再走一次其实是耽搁一次时间,故没有必要再走}                                              }}}return -1;
}void solve()
{for(int i=0;i<MAX_N;i++){for(int j=0;j<MAX_N;j++){map[i][j]=INF;      //初始化数组}}for(int i=0;i<m;i++)cin>>meteors[i].x>>meteors[i].y>>meteors[i].t;sort(meteors, meteors + m, compare);                //按t从小到大排列for(int i=0;i<m;i++){for(int j=0;j<5;j++){int nx=meteors[i].x,ny=meteors[i].y;nx += dx[j];ny += dy[j];if(check(nx,ny) && map[nx][ny]>meteors[i].t)       //记录一个点被摧毁的最早时间map[nx][ny] = meteors[i].t;}} cout<<bfs()<<endl;
}int main()
{ios::sync_with_stdio(false);while(cin>>m)solve();
}

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



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

相关文章

LA 3905 Meteor / 区间扫描

求哪一时刻 框框里的点最多 每个点在做运动(在边框上不算) 求出每个点经过框框的区间 在2维坐标系以x表示 是开区间 因为区间边上不算 假设有一条竖线从左到右扫描过去 也就是求哪一时刻扫描线相交的区间最多 可以设cnt = 0每遇到左区间++右区间--求最大的cnt 然后一个区间右端点与一个区间的左区间相同 要先算右区间因为是开区间 书上的代码 #include <cstdio>#i

Codeforces #247 (Div. 2) B. Shower Line

暴力题,知道下一个排列:next_permutation()就好做了 b[1]-b[5]为1-5的全排列 则找出b的所有全排列,计算sum = a[b[1]][b[2]] + a[b[2]][b[1]] + a[b[2]][b[3]] + a[b[3]][b[2]] + 2*a[b[3]][b[4]] + 2*a[b[4]][b[3]] + 2*a[b[4]][b[5]]+2*a[b[5]][

POJ 3669 Meteor Shower (BFS)

题目链接:http://poj.org/problem?id=3669 题意:有一场流星雨要降临,有个倒霉鬼要躲避流星雨。给出流星雨的降落位置和时间,每一个流星雨降临会造成上下左右的附加伤害,流行砸到过的地方不能再去。这个倒霉鬼以每秒一个距离单位的速度可以向上下左右四个方向逃跑,求他能不能逃掉。不能输出-1,能的话输出最短时间。 题解:BFS。用时间来初始化状态数组,进行BFS的时候判断一下时

【名词解释】ImageCaption任务中的CIDEr、n-gram、TF-IDF、BLEU、METEOR、ROUGE 分别是什么?它们是怎样计算的?

CIDEr CIDEr(Consensus-based Image Description Evaluation)是一种用于自动评估图像描述(image captioning)任务性能的指标。它主要通过计算生成的描述与一组参考描述之间的相似性来评估图像描述的质量。CIDEr的独特之处在于它考虑了人类对图像描述的共识,尝试捕捉描述的自然性和信息量。 CIDEr的计算过程 CIDEr的计算可以分

文本生成评估指标简单介绍BLEU+ROUGE+Perplexity+Meteor 代码实现

以下指标主要针对两种:机器翻译和文本生成(文章生成),这里的文本生成并非是总结摘要那类文本生成,仅仅是针对生成句子/词的评价。 首先介绍BLEU,ROUGE, 以及BLEU的改进版本METEOR;后半部分介绍PPL(简单介绍,主要是关于交叉熵的幂,至于这里的为什么要求平均,是因为我们想要计算在一个n-gram的n中,平均每个单词出现需要尝试的次数。 机器翻译(Machine Translatio

搜索-BFS Meteor Shower S(流星雨)

Meteor Shower S(流星雨) 题目连接 题目描述 贝茜听说一场特别的流星雨即将到来:这些流星会撞向地球,并摧毁它们所撞击的任何东西。她为自己的安全感到焦虑,发誓要找到一个安全的地方(一个永远不会被流星摧毁的地方)。 如果将牧场放入一个直角坐标系中,贝茜现在的位置是原点,并且,贝茜不能踏上一块被流星砸过的土地。 根据预报,一共有 M M M 颗流星 ( 1 ≤ M ≤ 50

在Meteor Lake平台上使用NPU进行AI推理加速

在Meteor Lake平台上,英特尔通过神经处理单元 (NPU) 将人工智能直接融入芯片中,实现桌面电脑平台的AI推理功能。神经处理单元 (NPU) 是一种专用人工智能引擎,专为运行持续的人工智能推理工作负载而设计。与即将推出的支持深度人工智能集成的 Windows 版本(预计将于 2024 年夏季推出)搭配,Meteor Lake 可能预示着人工智能 PC 时代的开始,计算机可以利用人工智

洛谷P2895Meteor Shower S

P2895 [USACO08FEB]Meteor Shower S 题目描述 Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will crash into earth and destroy anything they hit. Anxious for her

Ubuntu18.04上踩坑之pycocoevalcap——meteor.py

这一切源于: 第一次配置双系统时,给Ubuntu分配了太少的空间,导致后来只存放几个Project(还要保存训练文件)就内存不够了,于是下定决心重装Ubuntu! 问题描述: 顺利安装完Ubuntu、pycharm、anaconda、pytorch之后,在旧Ubuntu上可以完美运行的Project在这里爆出了一个bug:        File "/home/teemo/Desk

洛谷P2895 Meteor Shower S(流星雨)

题目描述 贝茜听说一场特别的流星雨即将到来:这些流星会撞向地球,并摧毁它们所撞击的任何东西。她为自己的安全感到焦虑,发誓要找到一个安全的地方(一个永远不会被流星摧毁的地方)。 如果将牧场放入一个直角坐标系中,贝茜现在的位置是原点,并且,贝茜不能踏上一块被流星砸过的土地。 根据预报,一共有 M 颗流星 (1≤M≤50,000) 会坠落在农场上,其中第 i 颗流星会在时刻 Ti​(0≤Ti​≤1