给出数字N(1<=N<=10000),X(1<=x<=1000),Y(1<=Y<=1000),代表有N个敌人分布一个X行Y列的矩阵上,矩形的行号从0到X-1,列号从0到Y-1再给出四个数字x1,y1,x2,y2,代表你要从点(x1,y1)移到(x2,y2)。在移动的过程中你当然希望离敌人的距离的最小值最大化,现在请求出这个值最大可以为多少,以及在这个前提下,你最少要走多少步才可以回到目标点。注意这里距离的定义为两点的曼哈顿距离,即某两个点的坐标分为(a,b),(c,d),那么它们的距离为|a-c|+|b-d|。

输入:

第一行给出数字N,X,Y

第二行给出x1,y1,x2,y2

下面将有N行,给出N个敌人所在的坐标

输出:

在一行内输出你离敌人的距离及在这个距离的限制下,你回到目标点最少要移动多少步。

Sample input

2 5 6

0 0 4 0

2 1

2 3

Sample output

2 14

/*
先预处理出每个点与距离它最近的敌人的距离,然后二分+BFS
我的预处理貌似写麻烦了,但是比标程快一秒,嘿嘿……
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#define N 10010
#define M 1010
using namespace std;
int dis[M][M],p,n,m,x1,y1,x2,y2;
int qx[M*M],qy[M*M],step[M][M],vis[M][M],head,tail;
int ax[]={,,,-};
int ay[]={,-,,};
struct node
{
int x,y;
};node a[N];
bool check(int limit)
{
if(dis[x1][y1]<limit)return false;
memset(step,0x3f3f3f3f,sizeof(step));
memset(vis,,sizeof(vis));
head=;tail=;
qx[]=x1;qy[]=y1;step[x1][y1]=;vis[x1][y1]=;
while(head<tail)
{
++head;int x=qx[head],y=qy[head];
if(x==x2&&y==y2)break;
for(int i=;i<;i++)
{
int xx=x+ax[i],yy=y+ay[i];
if(xx>=&&xx<=n&&yy>=&&yy<=m&&!vis[xx][yy]&&dis[xx][yy]>=limit)
{
++tail;
qx[tail]=xx;
qy[tail]=yy;
step[xx][yy]=step[x][y]+;
vis[xx][yy]=;
}
}
}
if(step[x2][y2]<)return true;
else return false;
}
void init()
{
memset(dis,0x3f3f3f3f,sizeof(dis));
for(int t=;t<=p;t++)
{
int x=a[t].x,y=a[t].y;
for(int i=x;i>=;i--)
{
if(dis[i][y]<=abs(x-i))break;
for(int j=y;j>=;j--)
{
if(dis[i][j]<=(abs(x-i)+abs(y-j)))break;
dis[i][j]=abs(x-i)+abs(y-j);
}
}
for(int i=x+;i<=n;i++)
{
if(dis[i][y]<=abs(x-i))break;
for(int j=y;j>=;j--)
{
if(dis[i][j]<=(abs(x-i)+abs(y-j)))break;
dis[i][j]=abs(x-i)+abs(y-j);
}
}
for(int i=x;i>=;i--)
{
if(dis[i][y+]<=abs(x-i))break;
for(int j=y+;j<=m;j++)
{
if(dis[i][j]<=(abs(x-i)+abs(y-j)))break;
dis[i][j]=abs(x-i)+abs(y-j);
}
}
for(int i=x+;i<=n;i++)
{
if(dis[i][y+]<=abs(x-i))break;
for(int j=y+;j<=m;j++)
{
if(dis[i][j]<=(abs(x-i)+abs(y-j)))break;
dis[i][j]=abs(x-i)+abs(y-j);
}
}
}
}
int main()
{
//freopen("jh.in","r",stdin);
freopen("escape.in","r",stdin);
freopen("escape.out","w",stdout);
scanf("%d%d%d%d%d%d%d",&p,&n,&m,&x1,&y1,&x2,&y2);
x1++;y1++;x2++;y2++;
for(int i=;i<=p;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
a[i].x++;a[i].y++;
}
init();
int l=,r=n*m,ans1,ans2;
while(l<=r)
{
int mid=(l+r)/;
if(check(mid))
{
ans1=mid;
ans2=step[x2][y2];
l=mid+;
}
else r=mid-;
}
printf("%d %d",ans1,ans2);
return ;
}

大逃亡(escape.*)的更多相关文章

  1. HDU 3533 Escape(大逃亡)

    HDU 3533 Escape(大逃亡) /K (Java/Others)   Problem Description - 题目描述 The students of the HEU are maneu ...

  2. hdu.1429.胜利大逃亡(续)(bfs + 0101011110)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  3. 胜利大逃亡[HDU1253]

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  4. hdu 1429 胜利大逃亡(续)

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王 ...

  5. Hdu 1429 胜利大逃亡(续) 分类: Brush Mode 2014-08-07 17:01 92人阅读 评论(0) 收藏

    胜利大逃亡(续) Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm ...

  6. HDOJ 1429 胜利大逃亡(续)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  7. hdu 1429 胜利大逃亡(续)(bfs+位压缩)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  8. hdoj 1253 胜利大逃亡

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. HDU-1253 胜利大逃亡 (BFS)

    此题可以做为三维深搜模板题.. 胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

随机推荐

  1. JSP-Runoob:JSP Session

    ylbtech-JSP-Runoob:JSP Session 1.返回顶部 1. JSP Session HTTP是无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会 ...

  2. struts2里result类型Stream的参数配置

    转自:https://blog.csdn.net/q714699280/article/details/51756126 contentType 内容类型,和互联网MIME标准中的规定类型一致,例如t ...

  3. Unity项目 - 捡苹果 Apple Picker

    项目展示 Github项目地址:Apple Picker 涉及知识 正投视图 3D场景内树与苹果的图层 记录最高分到本地 准备工作 模型制作: 基本模型创建 树叶:sphere 拉伸为椭圆形,绿色材质 ...

  4. python自动化测试学习笔记-5常用模块

    上一次学习了os模块,sys模块,json模块,random模块,string模块,time模块,hashlib模块,今天继续学习以下的常用模块: 1.datetime模块 2.pymysql模块(3 ...

  5. HDU 3007 最小圆覆盖 计算几何

    思路: 随机增量法 (好吧这数据范围并不用) //By SiriusRen #include <cmath> #include <cstdio> #include <al ...

  6. 为什么选择Android Studio 而是 Eclipse

    Android Studio 现在的版本已经比较稳定了,刚出来时也是各种BUG,自己用了下,摸索了一天,感觉挺好的. 优点之一:代码提示和搜索功能非常强大,非常智能. 1).自定义theme有个名字叫 ...

  7. 回收maven私仓过期垃圾

    login->scheduled tasks->add

  8. Count the consecutive zero bits (trailing) on the right with multiply and lookup

    我在网上看到了一点神奇的代码,用来计算一个数字末尾连续零的个数. 刚好我在优化一个I2C读写函数(只写入I2C特定bit),觉得这个很有用.经过尝试,确实没问题. 下面我隆重介绍一下: Count t ...

  9. 整合springboot,angular2,可以前后台交互数据

    改造了一下angular2官方文档中的hero项目,让其可以进行后台的交互, https://github.com/DACHUYIN 源码在上面...博客就不写了....

  10. iOS实现图形编程可以使用三种API(UIKIT、Core Graphics、OpenGL ES及GLKit)

    这些api包含的绘制操作都在一个图形环境中进行绘制.一个图形环境包含绘制参数和所有的绘制需要的设备特定信息,包括屏幕图形环境.offscreen 位图环境和PDF图形环境,用来在屏幕表面.一个位图或一 ...