1941: [Sdoi2010]Hide and Seek

Time Limit: 16 Sec  Memory Limit: 162 MB
Submit: 531  Solved: 295
[Submit][Status][Discuss]

Description

小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏---捉迷藏。 但是,他们觉得,玩普通的捉迷藏没什么意思,还是不够寂寞,于是,他们决定玩寂寞无比的螃蟹版捉迷藏,顾名思义,就是说他们在玩游戏的时候只能沿水平或垂直方向走。一番寂寞的剪刀石头布后,他们决定iPig去捉giPi。由于他们都很熟悉PKU的地形了,所以giPi只会躲在PKU内n个隐秘地点,显然iPig也只会在那n个地点内找giPi。游戏一开始,他们选定一个地点,iPig保持不动,然后giPi用30秒的时间逃离现场(显然,giPi不会呆在原地)。然后iPig会随机地去找giPi,直到找到为止。由于iPig很懒,所以他到总是走最短的路径,而且,他选择起始点不是随便选的,他想找一个地点,使得该地点到最远的地点和最近的地点的距离差最小。iPig现在想知道这个距离差最小是多少。 由于iPig现在手上没有电脑,所以不能编程解决这个如此简单的问题,所以他马上打了个电话,要求你帮他解决这个问题。iPig告诉了你PKU的n个隐秘地点的坐标,请你编程求出iPig的问题。

Input

第一行输入一个整数N 第2~N+1行,每行两个整数X,Y,表示第i个地点的坐标

Output

一个整数,为距离差的最小值。

Sample Input

4
0 0
1 0
0 1
1 1

Sample Output

1
 
噗,这不是k-d树模版么,好像没怎么写过……
于是我敲啊敲,敲啊敲……233……TLE+WA
然后我开始膜黄学长代码……
噗,好像差不多……
于是我开始调……从来没写过的算法果然细节上出了很多问题……
调了一天……
A啦……
并没有什么用……
 
#include<cstdio>
#include<algorithm>
using namespace std; int n,m,nu,ans=1e9,ma,mi,ka,ki,X,ro,xx;
struct tr{
int x,y;
friend bool operator<(tr a,tr b){
if (X) return a.x<b.x;else return a.y<b.y;
}
};
struct tree{
int xa,xi,ya,yi,ye,l,r;
tree(){
l=r=xa=ya=ye=;
xi=yi=1e9;
}
};
tr a[];
tree t[];
char cs;
inline int read(){
cs=getchar();xx=;
while(cs<''||cs>'') cs=getchar();
while(cs>=''&&cs<='') xx=xx*+cs-,cs=getchar();
return xx;
}
inline bool cmx(tr x,tr y){
return x.x<y.x;
}
inline bool cmy(tr x,tr y){
return x.y<y.y;
}
inline int max(int x,int y){return x>y?x:y;}
inline int min(int x,int y){return x<y?x:y;}
inline int abs(int x){return x<?-x:x;}
inline int jl(int x,int y){
return abs(a[x].x-a[y].x)+abs(a[x].y-a[y].y);
}
inline int build(int l,int r,int now){
X=now;
int mid=(l+r)>>;
t[mid].ye=;
nth_element(a+l,a+mid,a+r+);
t[mid].xa=t[mid].xi=a[mid].x;
t[mid].ya=t[mid].yi=a[mid].y;
if (l<mid) t[mid].l=build(l,mid-,now^),
t[mid].xa=max(t[t[mid].l].xa,t[mid].xa),
t[mid].xi=min(t[t[mid].l].xi,t[mid].xi),
t[mid].ya=max(t[t[mid].l].ya,t[mid].ya),
t[mid].yi=min(t[t[mid].l].yi,t[mid].yi);
if (mid<r) t[mid].r=build(mid+,r,now^),
t[mid].xa=max(t[t[mid].r].xa,t[mid].xa),
t[mid].xi=min(t[t[mid].r].xi,t[mid].xi),
t[mid].ya=max(t[t[mid].r].ya,t[mid].ya),
t[mid].yi=min(t[t[mid].r].yi,t[mid].yi);
return mid;
}
inline int gm(int i,int j){return max(abs(t[j].xa-a[i].x),abs(t[j].xi-a[i].x))+max(abs(t[j].ya-a[i].y),abs(t[j].yi-a[i].y));}
inline int gn(int i,int j){return max(a[i].x-t[j].xa,)+max(-a[i].x+t[j].xi,)+max(a[i].y-t[j].ya,)+max(-a[i].y+t[j].yi,);}
inline void qa(int i,int x){
if (x!=i) ma=max(ma,jl(i,x)),ka++;
int dl=-,dr=-;
if (t[x].l) dl=gm(i,t[x].l);
if (t[x].r) dr=gm(i,t[x].r);
if (dl>dr){
if (dl>ma) qa(i,t[x].l);
if (dr>ma) qa(i,t[x].r);
}else{
if (dr>ma) qa(i,t[x].r);
if (dl>ma) qa(i,t[x].l);
}
}
inline void qi(int i,int x){
if (x!=i) mi=min(mi,jl(i,x)),ki++;
int dl=1e9,dr=1e9;
if (t[x].l) dl=gn(i,t[x].l);
if (t[x].r) dr=gn(i,t[x].r);
if (dl>dr){
if (dr<mi) qi(i,t[x].r);
if (dl<mi) qi(i,t[x].l);
}else{
if (dl<mi) qi(i,t[x].l);
if (dr<mi) qi(i,t[x].r);
}
}
int main(){
n=read();
register int i;
for (i=;i<=n;i++) a[i].x=read(),a[i].y=read();
ro=build(,n,);
for (i=;i<=n;i++)
{
ma=;mi=1e9;
qa(i,ro);qi(i,ro);
if (ma-mi<ans) ans=ma-mi;
}
printf("%d\n",ans);
}

bzoj:1941: [Sdoi2010]Hide and Seek的更多相关文章

  1. BZOJ 1941: [Sdoi2010]Hide and Seek(k-d Tree)

    Time Limit: 16 Sec  Memory Limit: 162 MBSubmit: 1712  Solved: 932[Submit][Status][Discuss] Descripti ...

  2. bzoj 1941 [Sdoi2010]Hide and Seek——KDtree

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1941 第二道KDtree! 枚举每个点,求出距离它的最远和最近距离.O( n * logn ...

  3. BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数

    Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000 using namespace std; ...

  4. 【54.08%】【BZOJ 1941】Hide and Seek

    Time Limit: 16 Sec  Memory Limit: 162 MB Submit: 919  Solved: 497 [Submit][Status][Discuss] Descript ...

  5. [BZOJ1941][Sdoi2010]Hide and Seek

    [BZOJ1941][Sdoi2010]Hide and Seek 试题描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他 ...

  6. 【BZOJ1941】[Sdoi2010]Hide and Seek KDtree

    [BZOJ1941][Sdoi2010]Hide and Seek Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了 ...

  7. 【bzoj1941】 Sdoi2010—Hide and Seek

    http://www.lydsy.com/JudgeOnline/problem.php?id=1941 (题目链接) 题意 给出n个二维平面上的点,求一点使到最远点的距离-最近点的距离最小. Sol ...

  8. 【bzoj1941】[Sdoi2010]Hide and Seek(kd-tree)

    bzoj 题意: 给出\(n\)个点,对于每个点,\(d_i\)等于距离其最远的点的距离减去距离最近的点的距离.这里的距离为曼哈顿距离. 求\(min\{d_i\}\). 思路: 考虑直接对每个点暴力 ...

  9. 【kd-tree】bzoj1941 [Sdoi2010]Hide and Seek

    枚举每个点,计算离他最近的和最远的点. #include<cstdio> #include<cmath> #include<algorithm> using nam ...

随机推荐

  1. 零基础学习webpack打包管理

    这些天在项目之余的时间学习了webpack打包项目的东西,非常荣幸的找到一些大神的文章来学习,死劲嚼了几天,终于略知一二.在以后的工作上还需继续学习,下面我将分享我这几天学到的一点东西,希望能让我一个 ...

  2. 转:Siri之父:语音交互或将主导未来十年发展

    http://zhinengjiaohu.juhangye.com/201709/weixin_5664458.html Siri之父Adam Cheyer认为,语音交互很可能是未来十年内计算技术的一 ...

  3. bzoj 4538: [Hnoi2016]网络

    Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器的路径上的所有服 ...

  4. Qt个人研究进展

    1:纯socket通信实现多线程邮件发送,支持多个收件人和附件,通用任何平台,包括ARM.2:纯串口通信AT命令实现多线程短信收发,支持多个收件人和长短信,通用任何平台,包括ARM.3:纯串口通信PO ...

  5. unity图片后期处理

    处理算法如下,在Start方法中分别调用想要的效果就行了.其中,将你需要处理的 图片 拖拽到 image参数上.注意,如果想要图片保持原来的尺寸不被压缩,需要更改图片的导入设置如下图,主要的Textu ...

  6. 实现全屏轮播,并且轮播div中的文字盒子一直自动垂直居中

    效果如下: 直接上代码了: 说明:轮播图基于swiper.js,自行下载.css在最后 <!DOCTYPE html> <html lang="en"> & ...

  7. springBoot系列教程04:mybatis及druid数据源的集成及查询缓存的使用

    首先说下查询缓存:查询缓存就是相同的数据库查询请求在设定的时间间隔内仅查询一次数据库并保存到redis中,后续的请求只要在时间间隔内都直接从redis中获取,不再查询数据库,提高查询效率,降低服务器负 ...

  8. VS2017 调试期间无法获取到变量值查看

    只要把勾去掉就能查看变量的值了

  9. 浅析mongodb

    当爬取数据时候,我们可能需要缓存大量的数据,但是又无须任何复杂的连接操作,因此我们将选用NoSQL数据库,这种数据库比传统的关系型数据库更易于操作,这里我想主要说一下目前非常流行的MongoDB作为缓 ...

  10. Unity3d 协程

    参考文章: http://blog.csdn.net/onafioo/article/details/48979939 http://www.cnblogs.com/zhaoqingqing/p/37 ...