Descrption

有一些矩形障碍,碰到障碍会停下,求从一个点到另一个点的最少移动步数.

Sol

BFS.

因为题目的特殊性质,两个矩形没有任何相邻,起始点和终点和矩形没有相邻.

所以从一个点的移动只有 左/右 或 上/下两种可能,与它到该点的方向不同,不然就又移动回去了.

然后可以在边BFS的时候边建图,往上/下 或 左/右 找能限制住他的矩阵.

复杂度 \(O(n^2)\)

Code

/**************************************************************
Problem: 2541
User: BeiYu
Language: C++
Result: Accepted
Time:148 ms
Memory:1420 kb
****************************************************************/ #include<cstdio>
#include<queue>
#include<iostream>
using namespace std; const int N = 4050;
const int INF = 1e9; int n,sx,sy,tx,ty;
int x1[N],y1[N],x2[N],y2[N],vis[N<<2];
struct S{ int r,x,y,d; };
queue< S > q;
//U 0 D 1 L 2 R 3 inline int in(int x=0,char ch=getchar(),int v=1){
while(ch!='-' && (ch>'9' || ch<'0')) ch=getchar();if(ch == '-') v=-1,ch=getchar();
while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*v; }
int main(){
n=in(),sx=in(),sy=in(),tx=in(),ty=in();
for(int i=1;i<=n;i++) x1[i]=in(),y1[i]=in(),x2[i]=in(),y2[i]=in();
for(q.push((S){ 0,sx,sy,0 }),q.push((S){ 1,sx,sy,0 });!q.empty();){
int mx=-INF,mi=INF,p1=0,p2=0;
int rr=q.front().r,xx=q.front().x,yy=q.front().y,dd=q.front().d;
q.pop();
if(rr){//Move to Up/Down
for(int i=1;i<=n;i++) if(x1[i]<=xx && xx<=x2[i]){
if(y1[i]>yy && y1[i]<mi) mi=y1[i],p1=i;
if(y2[i]<yy && y2[i]>mx) mx=y2[i],p2=i;
}
if(p1 && !vis[p1<<2]) vis[p1<<2]=1,q.push((S){ 0,xx,mi-1,dd+1 });
if(p2 && !vis[p2<<2|1]) vis[p2<<2|1]=1,q.push((S){ 0,xx,mx+1,dd+1 });
if(xx==tx && mx<=ty && ty<=mi) return printf("%d\n",dd+1),0;
}else{//Move to Left/Right
for(int i=1;i<=n;i++) if(y1[i]<=yy && yy<=y2[i]){
if(x1[i]>xx && x1[i]<mi) mi=x1[i],p1=i;
if(x2[i]<xx && x2[i]>mx) mx=x2[i],p2=i;
}
if(p1 && !vis[p1<<2|2]) vis[p1<<2|2]=1,q.push((S){ 1,mi-1,yy,dd+1 });
if(p2 && !vis[p2<<2|3]) vis[p2<<2|3]=1,q.push((S){ 1,mx+1,yy,dd+1 });
if(yy==ty && mx<=tx && tx<=mi) return printf("%d\n",dd+1),0;
}
}return printf("%d\n",0),0;
}

  

BZOJ 2541: [Ctsc2000]冰原探险的更多相关文章

  1. [Ctsc2000]冰原探险

    Description 传说中,南极有一片广阔的冰原,在冰原下藏有史前文明的遗址.整个冰原被横竖划分成了很多个大小相等的方格.在这个冰原上有N个大小不等的矩形冰山,这些巨大的冰山有着和南极一样古老的历 ...

  2. [题目] Luogu P3716 [CTSC2000]冰原探险

    题面 题目背景 传说中,南极有一片广阔的冰原,在冰原下藏有史前文明的遗址.整个冰原被横竖划分成了很多个大小相等的方格.在这个冰原上有N个大小不等的矩形冰山,这些巨大的冰山有着和南极一样古老的历史,每个 ...

  3. 【[CTSC2000]冰原探险】

    noip前练一下码力还是非常有前途的 这道题本来就是想写个大暴力弃疗的,所以直接强上暴力浑身舒爽 结果发现要不是判重的时候脑残了,就能\(A\)了 没什么好说的呀,就是每一次都暴力\(O(n)\)往上 ...

  4. 【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险

    http://www.lydsy.com/JudgeOnline/problem.php?id=2541 https://vijos.org/p/1366 loli秘制大爆搜_(:з」∠)_坑了好久啊 ...

  5. BZOJ 2246 [SDOI2011]迷宫探险 (记忆化搜索)

    题目大意:太长了,略 bzoj luogu 并没有想到三进制状压 题解: 3进制状压陷阱的状态,0表示这种陷阱的状态未知,1已知危险,2已知不危险 然后预处理出在当前状态下,每种陷阱有害的概率,设为$ ...

  6. BZOJ.2246.[SDOI2011]迷宫探险(DP 记忆化搜索 概率)

    题目链接 求最大的存活概率,DP+记忆化. 用f[s][x][y][hp]表示在s状态,(x,y)点,血量为hp时的存活概率. s是个三进制数,记录每个陷阱无害/有害/未知. 转移时比较容易,主要是在 ...

  7. 【刷题】BZOJ 2539 [Ctsc2000]丘比特的烦恼

    Description 随着社会的不断发展,人与人之间的感情越来越功利化.最近,爱神丘比特发现,爱情也已不再是完全纯洁的了.这使得丘比特很是苦恼,他越来越难找到合适的男女,并向他们射去丘比特之箭.于是 ...

  8. BZOJ 2539: [Ctsc2000]丘比特的烦恼

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 695  Solved: 260[Submit][Status][Discuss] Description ...

  9. BZOJ 2246 [SDOI2011]迷宫探险 ——动态规划

    概率DP 记忆化搜索即可,垃圾数据,就是过不掉最后一组 只好打表 #include <cstdio> #include <cstring> #include <iostr ...

随机推荐

  1. TCP/UDP端口列表

    http://zh.wikipedia.org/wiki/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8 TCP/UDP端口列表     本条目可通过翻译外语维 ...

  2. ARCGIS9.2安装说明

    1.        如果已经安装 ArcGIS 9.1, 先完全卸载. 2.        License Manger 安装 a.     创建此路径:                        ...

  3. Runner站立会议01

    开会时间:9.10-9.30 地点:二教 今天做了什么:学了文本输入,button按钮,界面转换(意图) 遇到什么困难:界面转换时,出现问题,没有正常跳转 明天打所作什么:解决今天遇到的问题,学了第二 ...

  4. python开发_++i,i += 1的区分

    python开发_++i,i += 1的区分 在很多编程语言(C/C++,Java等)中我们都会碰到这样的语法: 1 int i = 0; 2 ++ i; // -- i; 这样的语法在上述编程语言中 ...

  5. vertical-align0 垂直对齐- 图片 兼容个浏览器

    效果:  代码: <html> <head> <style type="text/css"> img.top {vertical-align:t ...

  6. Linux下删除命令

    linux删除目录很简单 使用rm -rf命令即可.直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字(警告:不作任何提示,且不可恢复,不要说没提醒哦!严重警告!!!)-r 就是向下 ...

  7. JavaScript 面向对象程序设计(下)——继承与多态 【转】

    JavaScript 面向对象程序设计(下)--继承与多态 前面我们讨论了如何在 JavaScript 语言中实现对私有实例成员.公有实例成员.私有静态成员.公有静态成员和静态类的封装.这次我们来讨论 ...

  8. CentOs图形界面的开启与关闭

    1.1 shell中运行 init 3  进入文本模式,同时会关闭相关的服务(Xserver 肯定关闭) 1.2 Alt+Ctrl+F1~F6到字符界面,root登陆,ps aux|grep /usr ...

  9. thinkphp 项目分组 -开发随笔1

    php中变量的声明, 和变量的初始化 是结合在一起的, 要声明变量, 就是通过初始化变量来实现的. 感觉页面版式的布局, 还是: 先大致规划出布局, 如两栏 三栏, 一览的左右上下结合, 搭配. 然后 ...

  10. R 字符串处理函数

    用R来处理字符串数据并不是一个很好的选择,还是推荐使用Perl或者Python等语言.不过R本身也提供了一些常用的字符串处理函数,这篇文章就对这些字符串函数做一个简单的总结,具体各个函数的使用方法还是 ...