P2895 [USACO08FEB] Meteor Shower S
一句话题意在非负网格(x0,y0)中,有m颗流星在时刻坠落,会烧毁坠落的那一格以及上下左右4格,问主角从(0,0)移动到安全格需要多少时间?不可能则输出-1.关键这道题与马的行走那道题一样,都需要正确使用偏移量数组,可大大简化程序for(int i0;i4;i){int nxu.xdx[i];int nyu.ydy[i];//......}不过还有一个边界问题:在非负网格中,横纵坐标可以无限延伸,x301,y301的情况是许可并且安全的while(q.size()){auto uq.front();q.pop();// 如果当前位置永远不会被击中if(tu[u.x][u.y]1e8) coutu.t,exit(0);for(int i0;i4;i){int nxu.xdx[i];int nyu.ydy[i];//在非负网格中,横纵坐标可以无限延伸,x301,y301的情况是许可并且安全的//如果不写这行代码而是改用正常的判断,安全点根本不会入队if(nx301 or ny301) coutu.t1,exit(0);// 检查边界:这样也可以避免访问到无效下标if(nx0 or ny0) continue;// vis检查if(vis[nx][ny]) continue;// 检查到达时间是否早于流星撞击时间if(u.t1tu[nx][ny]){vis[nx][ny]1;q.push({nx,ny,u.t1});}}