【BZOJ1941】[Sdoi2010]Hide and Seek

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

HINT

对于30%的数据,N<=1000 对于100%的数据,N<=500000,0<=X,Y<=10^8 保证数据没有重点保证N>=2

题解:KDtree裸题+1,一开始以为距离最远的可以直接贪心来搞,结果WA了无数次~

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. #define rep for(int i=0;i<=1;i++)
  6. using namespace std;
  7. int n,m,root,D,maxx,minn,ans;
  8. int kx[]={1,-1,1,-1},ky[]={1,1,-1,-1},dm[5];
  9. struct kd
  10. {
  11. int v[2],sn[2],sm[2],ls,rs;
  12. kd (int a,int b){ls=rs=0,v[0]=sn[0]=sm[0]=a,v[1]=sn[1]=sm[1]=b;}
  13. kd (){}
  14. };
  15. kd t[500010];
  16. bool cmp(kd a,kd b)
  17. {
  18. if(a.v[D]==b.v[D]) return a.v[D^1]<b.v[D^1];
  19. return a.v[D]<b.v[D];
  20. }
  21. int rd()
  22. {
  23. int ret=0,f=1; char gc=getchar();
  24. while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
  25. while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
  26. return ret*f;
  27. }
  28. void pushup(int x,int y)
  29. {
  30. rep t[x].sn[i]=min(t[x].sn[i],t[y].sn[i]),t[x].sm[i]=max(t[x].sm[i],t[y].sm[i]);
  31. }
  32. int build(int l,int r,int d)
  33. {
  34. if(l>r) return 0;
  35. int mid=l+r>>1;
  36. D=d;
  37. nth_element(t+l,t+mid,t+r+1,cmp);
  38. t[mid].ls=build(l,mid-1,d^1),t[mid].rs=build(mid+1,r,d^1);
  39. if(t[mid].ls) pushup(mid,t[mid].ls);
  40. if(t[mid].rs) pushup(mid,t[mid].rs);
  41. return mid;
  42. }
  43. int getmin(int x,int y)
  44. {
  45. int ret=0;
  46. rep ret+=max(t[y].v[i]-t[x].sm[i],0)+max(t[x].sn[i]-t[y].v[i],0);
  47. return ret;
  48. }
  49. int getmax(int x,int y)
  50. {
  51. int ret=0;
  52. rep ret+=max(abs(t[x].sm[i]-t[y].v[i]),abs(t[x].sn[i]-t[y].v[i]));
  53. return ret;
  54. }
  55. void qmin(int x,int y)
  56. {
  57. if(!x||getmin(x,y)>=minn) return ;
  58. if(x!=y) minn=min(minn,abs(t[x].v[0]-t[y].v[0])+abs(t[x].v[1]-t[y].v[1]));
  59. if(t[x].ls*t[x].rs==0) qmin(t[x].ls^t[x].rs,y);
  60. else if(getmin(t[x].ls,y)<getmin(t[x].rs,y)) qmin(t[x].ls,y),qmin(t[x].rs,y);
  61. else qmin(t[x].rs,y),qmin(t[x].ls,y);
  62. }
  63. void qmax(int x,int y)
  64. {
  65. if(!x||getmax(x,y)<=maxx) return ;
  66. if(x!=y) maxx=max(maxx,abs(t[x].v[0]-t[y].v[0])+abs(t[x].v[1]-t[y].v[1]));
  67. if(t[x].ls*t[x].rs==0) qmax(t[x].ls^t[x].rs,y);
  68. else if(getmax(t[x].ls,y)>getmax(t[x].rs,y)) qmax(t[x].ls,y),qmax(t[x].rs,y);
  69. else qmax(t[x].rs,y),qmax(t[x].ls,y);
  70. }
  71. int main()
  72. {
  73. n=rd();
  74. int i,j,a,b;
  75. dm[0]=dm[1]=dm[2]=dm[3]=1;
  76. for(i=1;i<=n;i++)
  77. {
  78. a=rd(),b=rd(),t[i]=kd(a,b);
  79. for(j=0;j<4;j++) if(a*kx[j]+b*ky[j]<t[dm[j]].v[0]*kx[j]+t[dm[j]].v[1]*ky[j]) dm[j]=i;
  80. }
  81. root=build(1,n,0),ans=1<<30;
  82. for(i=1;i<=n;i++)
  83. {
  84. maxx=0,minn=1<<30;
  85. qmax(root,i),qmin(root,i);
  86. ans=min(ans,maxx-minn);
  87. }
  88. printf("%d",ans);
  89. return 0;
  90. }

【BZOJ1941】[Sdoi2010]Hide and Seek KDtree的更多相关文章

  1. 【bzoj1941】[Sdoi2010]Hide and Seek KD-tree

    题目描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏---捉迷藏. ...

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

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

  3. 【bzoj1941】 Sdoi2010—Hide and Seek

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

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

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

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

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

  6. 【BZOJ1941】Hide and Seek(KD-Tree)

    [BZOJ1941]Hide and Seek(KD-Tree) 题面 BZOJ 洛谷 题解 \(KD-Tree\)对于每个点搜一下最近点和最远点就好了 #include<iostream> ...

  7. 【BZOJ-1941】Hide and Seek KD-Tree

    1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec  Memory Limit: 162 MBSubmit: 830  Solved: 455[Submi ...

  8. [BZOJ1941][Sdoi2010]Hide and Seek

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

  9. bzoj:1941: [Sdoi2010]Hide and Seek

    1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec  Memory Limit: 162 MBSubmit: 531  Solved: 295[Submi ...

随机推荐

  1. IIC读写AT24C02代码2——串口命令控制多页读写

    通过串口输入 R .W 进行控制程序读写IIC设备.波特率9600bps,晶振115200HZ. main.c /*------------------------------------------ ...

  2. 修改注册表实现Windows自动登陆

    昨天再修一条case时无意间发现这个case竟然要重启机器,并且要用指定的账户自动登陆Windows.然后就发现了,简单的修改下注册表就可以完成自动登陆了. 首先,在“run”里输入“regedit” ...

  3. python的threading和multiprocessing模块初探

    转载于:http://blog.csdn.net/zhaozhi406/article/details/8137670

  4. ASP.NET_SessionId 不相同导致验证码出错

    问题: 今天碰到一个比较奇怪的问题,每个页面请求的cookie的ASP.NET_SessionId 不相同,导致验证码检验出错.也就是说每个请求都是一个新的会话,我们把验证码保证在Session[ra ...

  5. 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等

    一.修改最大连接数 1.查看当前文件描述符的限制数目的命令: ulimit -n 2.修改文件描述符的限制数目 2.1 临时改变当前会话: ulimit -n 65536 2.2 永久变更需要下面两个 ...

  6. webpack 通用环境快速搭建

    能用babel编译es2015 . 能热编译.能加载静态资源(js/css/font/image).是一个很通用的开发环境,虽然不智能.但很好扩展 npm 安装列表: # webpack 核心 npm ...

  7. web 图片上传实现本地预览

    在说上传之前先说说如何替换or美化浏览器自带的简陋上传按钮(自定义自己的上传按钮 如:img): 1.将自定义上传按钮上方添加 input file 框,实现input实现透明处理. 2.对自定义上传 ...

  8. atitit.MIZIAN 陕北方言 特有词汇 大词典 attilax 整理 a--g v1 q31.xlsx

    atitit.MIZIAN 陕北方言 特有词汇 大词典 attilax 整理 a--g v1 q31.xlsx 1  Mizian陕北方言 english英语 spain西班牙语 cantonese粤 ...

  9. 142. Linked List Cycle II【easy】

    142. Linked List Cycle II[easy] Given a linked list, return the node where the cycle begins. If ther ...

  10. grub.conf文件说明

    default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux ...