大逃亡(escape.*)
给出数字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.*)的更多相关文章
- HDU 3533 Escape(大逃亡)
HDU 3533 Escape(大逃亡) /K (Java/Others) Problem Description - 题目描述 The students of the HEU are maneu ...
- hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 胜利大逃亡[HDU1253]
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 1429 胜利大逃亡(续)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王 ...
- 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 ...
- HDOJ 1429 胜利大逃亡(续)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- hdu 1429 胜利大逃亡(续)(bfs+位压缩)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- hdoj 1253 胜利大逃亡
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU-1253 胜利大逃亡 (BFS)
此题可以做为三维深搜模板题.. 胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
随机推荐
- 云栖社区> > 正文 永久免费SSL安全证书Letsencrypt安装使用方法
./letsencrypt-auto certonly --standalone --email admin@thing.com -d thing.com -d www.thing.com
- SpringMvc快速入门之使用篇
文章是为了结合工作需求来介绍springmvc,本文章只是切合实际的开发的场景对springmvc进行快速的入门介绍. 本篇文章不会对原理进行讲解.因为个人觉得有些对于新技术方面可以分为一下几个层次. ...
- AJAX json集合传入Controller后台
HTML代码 <html> <head> <meta http-equiv="Content-Type" content="text/htm ...
- Android彻底组件化方案实践
本文提出的组件化方案demo已经开源,参见文章Android彻底组件化方案开源. 文末有罗辑思维"得到app"的招聘广告,欢迎各路牛人加入!! 一.模块化.组件化与插件化 项目发展 ...
- React Native导航器Navigator
React Native导航器Navigator 使用导航器可以让你在应用的不同场景(页面)间进行切换.导航器通过路由对象来分辨不同的场景.利用renderScene方法,导航栏可以根据指定的路由来渲 ...
- facenet
facenet dl face recognition 一.运行facenet 验证lfw数据集效果: python2.7 src/validate_on_lfw.py ~/dataset/lfw ...
- mysql自动增长的有关问题,怎么恢复从1开始
mysql自动增长的问题,如何恢复从1开始在一个表中我设置到autoid为自动增长列例如有如下数据 1 张三 男 202 王五 男 223 李四 男 254 陈大 男 19 现在我把 autoid=3 ...
- MySQL主从备份配置
MySQL主从热备配置 两台服务器的MySQL版本都是5.5.41master:192.168.3.119slave:192.168.3.120 MySQL主服务器配置:1.创建用于备份的用户 gra ...
- JAVA和JVM运行原理揭秘
这里和大家简单分享一下JAVA和JVM运行的原理,Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS之上的Java解释器 ...
- java网络
title: java 网络 date: 2017年3月11日11:14:52 1. 复杂的东西就把他封装成对象 概述:(网络就是找到别人) 找到对方的机器,(找到对方的ip地址) 每个机器中有很多进 ...