P2895
本题用时:01:44:20.
算法:BFS
期间固然去逛了逛淘宝买了两个东西,但毕竟还是太久了。我因为忘记判断是否出界而浪费了好多时间,后来才半天想起来,这便是用了这么长时间的原因。
之后提交代码只有六十多分,剩下的点TLE了,我马上反应过来是没判重,赶紧加了个判重。在这里,我没加判重是失误,但立刻能想起来判重而不是继续浪费好多时间才想起来也是一种进步了,希望下次能直接加上判重,不要吝啬判重需要的一点小空间。
Code
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <queue>
using namespace std;
struct meteor
{
int x,y,t;
};
meteor V[50005];
struct pt
{
int x,y,t;
pt(int X,int Y,int T){x=X;y=Y;t=T;}
};//pt和meteor是相同的类,但是代表不同的含义,所以分别定义能让代码更加清晰.当然了,类继承能让代码更简洁,但这里就不用了
queue<pt> q;
int M,p,m[305][305],n[305][305],gone[305][305],b[1005];
const int movex[5]={0,0,0,1,-1},
movey[5]={0,1,-1,0,0};
bool cmp(meteor A,meteor B){return A.t<B.t;}
int main()
{
cin>>M;
for(int i=0;i<M;i++)
{
cin>>V[i].x>>V[i].y>>V[i].t;
for(int j=0;j<=4;j++)
if(V[i].x+movex[j]>=0&&V[i].x+movex[j]<M
&&V[i].y+movey[j]>=0&&V[i].y+movey[j]<M)
m[V[i].x+movex[j]][V[i].y+movey[j]]=1;
}
sort(V,V+M,cmp);
q.push(pt(0,0,0));
while(!q.empty())
{
pt tpt=q.front();q.pop();
if(gone[tpt.x][tpt.y]==1)continue;
gone[tpt.x][tpt.y]=1;
if(m[tpt.x][tpt.y]==0)
{
cout<<tpt.t<<endl;
return 0;
}
if(b[tpt.t]==0)
for(b[tpt.t]=1;V[p].t<=tpt.t+1;p++)
for(int j=0;j<=4;j++)
if(V[p].x+movex[j]>=0&&V[p].x+movex[j]<M
&&V[p].y+movey[j]>=0&&V[p].y+movey[j]<M)
n[V[p].x+movex[j]][V[p].y+movey[j]]=1;
for(int j=1;j<=4;j++)
if(tpt.x+movex[j]>=0&&tpt.x+movex[j]<M&&tpt.y+movey[j]>=0&&tpt.y+movey[j]<M
&&n[tpt.x+movex[j]][tpt.y+movey[j]]==0&&gone[tpt.x+movex[j]][tpt.y+movey[j]]==0)
q.push(pt(tpt.x+movex[j],tpt.y+movey[j],tpt.t+1));
}
cout<<-1<<endl;
return 0;
}
P2895的更多相关文章
- bzoj1611 / P2895 [USACO08FEB]流星雨Meteor Shower
P2895 [USACO08FEB]流星雨Meteor Shower 给每个点标记一下能够走的最迟时间,蓝后bfs处理一下 #include<iostream> #include<c ...
- 洛谷—— P2895 [USACO08FEB]流星雨Meteor Shower
P2895 [USACO08FEB]流星雨Meteor Shower 题目描述 Bessie hears that an extraordinary meteor shower is coming; ...
- P2895 [USACO08FEB]流星雨Meteor Shower
传送门 预处理出每个位置最早被摧毁的时间,在此之前都可以走 直接dfs加个记忆化和最优性剪枝就好了 一定要注意流星的边界,如果波及到负数坐标的位置不要去考虑会RE 一定要考虑流星砸到边界的情况 如 ( ...
- 洛谷P2895 [USACO08FEB]流星雨Meteor Shower
题目描述 Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will ...
- 洛谷 P2895 [USACO08FEB]流星雨Meteor Shower 解题报告
一起来看流星雨吧(话说我还没看到过流星雨呢) 题目 Problem 小A则听说另一个骇人听闻的消息: 一场流星雨即将袭击整个霸中,由于流星体积过大,它们无法在撞击到地面前燃烧殆尽,届时将会对它撞到的一 ...
- 洛谷 P2895 [USACO08FEB]流星雨Meteor Shower
题目描述 Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will ...
- 洛谷 P2895 [USACO08FEB]Meteor Shower S (BFS)
题意:你刚开始位于坐标轴的\((0,0)\)点,一共有\(m\)颗流星砸向地面,每颗流星在\(t\)时砸到\((x,y)\)点,其四周上下左右也均有波及,你每秒可以向上下左右移动一个单位,问你是否可以 ...
随机推荐
- 使用Python合并多个Excel文件
合并Excel可以将多个文件中的数据合并到一个文件中,这样可以帮助我们更好地汇总和管理数据.日常工作中,合并Excel主要有以下两种需求: 将多个Excel文件合并为一个文件 将多个Excel工作表合 ...
- Python subprocess 使用(一)
Python subprocess 使用(一) 本文主要讲下 subprocess 的简单使用. 1: 通过subprocess 获取设备信息 import subprocess def get_an ...
- 整一个工具类【根据URL地址获取file文件对象】
整一个工具类[根据URL地址获取file文件对象] 直接将网络url文件转换为file对象 import java.io.*; import java.net.URL; public class Im ...
- java桌面小闹钟
写了个桌面的小闹钟,在运行环境可以编译,但是打包成jar文件,想用批处理命令直接调用报错"找不到或无法加载主类". 需求 为防止整天久坐,编写一个桌面闹钟.该闹钟功能很简单,一个小 ...
- eclipse 使用技巧和java相关
1,内容提示:alt + / 需要配置:windwos ->preferences中搜索keys,搜索alt +/ 发现它配置的是单词完成.搜索content assist,将alt ...
- Numpy计算近邻表时间对比
技术背景 所谓的近邻表求解,就是给定N个原子的体系,找出满足cutoff要求的每一对原子.在前面的几篇博客中,我们分别介绍过CUDA近邻表计算与JAX-MD关于格点法求解近邻表的实现.虽然我们从理论上 ...
- 从传统行业到半导体行业开发(YMS,DMS,EAP,EDA)
一线开发人: 今天半导体YMS 项目快要收尾了,我的心情有点高兴,多年来我一直保持着写作的习惯,总是想写一些什么,今天但是又不知道从何说起.自己从传统的行业转向左半导体行业开发.从电*机如软件开发到电 ...
- Python借助企业微信群机器人发送消息、图片和文件
企业微信功能日益强大,腾讯官方也提供了丰富的API供开发者实现企业微信的很多自动化场景.比如,如何给某个企业微信群发送消息.图片或者文件,甚至@指定群用户?别急,看小爬君轻松教会大家. Step1:在 ...
- CodeForces 1453D 概率 期望
CodeForces 1453D Checkpoints 概率 期望 原题链接 题意 现在我们可以设计n个擂台,有的是激活点,有的不是.从第一个开始挑战,每次都有1/2的概率成功,如果该点成功,则跳到 ...
- php +libcurl+nghttp2 实现高性能微服务架构
1.server端nginx编译时增加参数configure --with-http_v2_module server { listen 80 http2; ...