【题目链接】:http://poj.org/problem?id=3714

【题意】



给你两类的点;

各n个;

然后让你求出2*n个点中的最近点对的距离;

这里的距离定义为不同类型的点之间的距离;

【题解】



分治法;

不断划分小区间;

求出小区间内的最小值;

为后面的大区间剪枝;

只是要求点的类型不同才能剪枝了;



【Number Of WA】



0



【完整代码】

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <iomanip>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. #define lson l,m,rt<<1
  8. #define rson m+1,r,rt<<1|1
  9. #define LL long long
  10. #define rep1(i,a,b) for (int i = a;i <= b;i++)
  11. #define rep2(i,a,b) for (int i = a;i >= b;i--)
  12. #define mp make_pair
  13. #define pb push_back
  14. #define fi first
  15. #define se second
  16. #define ms(x,y) memset(x,y,sizeof x)
  17. #define Open() freopen("F:\\rush.txt","r",stdin)
  18. #define Close() ios::sync_with_stdio(0)
  19. typedef pair<int,int> pii;
  20. typedef pair<LL,LL> pll;
  21. const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
  22. const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
  23. const double pi = acos(-1.0);
  24. const int N = 2e5+100;
  25. const LL oo = 5e18;
  26. struct node{
  27. LL x,y;
  28. int p;
  29. };
  30. int n;
  31. node a[N],b[N];
  32. bool cmp1(node a,node b){
  33. return a.x < b.x;
  34. }
  35. bool cmp2(node a,node b){
  36. return a.y < b.y;
  37. }
  38. LL sqr(LL x){
  39. return x*x;
  40. }
  41. LL dis(node a,node b){
  42. LL temp = 0;
  43. temp+=sqr(a.x-b.x);
  44. temp+=sqr(a.y-b.y);
  45. return temp;
  46. }
  47. LL solve(int l,int r){
  48. LL ret = oo;
  49. if (l>=r) return ret;
  50. if (l+1==r) {
  51. if (a[l].p!=a[r].p)
  52. return dis(a[l],a[r]);
  53. else
  54. return ret;
  55. }
  56. int m = (l+r)>>1;
  57. LL ret1 = solve(l,m),ret2 = solve(m+1,r),temp;
  58. ret = min(ret1,ret2);
  59. int k = 0;
  60. rep2(i,m,l){
  61. temp =sqr(a[m].x-a[i].x);
  62. if (temp>ret && a[m].p != a[i].p) break;
  63. b[++k] = a[i];
  64. }
  65. rep1(i,m+1,r){
  66. temp = sqr(a[m].x-a[i].x);
  67. if (temp>ret && a[m].p != a[i].p) break;
  68. b[++k] = a[i];
  69. }
  70. sort(b+1,b+1+k,cmp2);
  71. rep1(i,1,k){
  72. rep1(j,i+1,k){
  73. if (b[i].p==b[j].p) continue;
  74. temp = sqr(b[i].y-b[j].y);
  75. if (temp > ret) break;
  76. temp = dis(b[i],b[j]);
  77. if (temp < ret) ret = temp;
  78. }
  79. }
  80. return ret;
  81. }
  82. int main(){
  83. //Open();
  84. Close();
  85. int T;
  86. cin >> T;
  87. while (T--){
  88. cin >> n;
  89. rep1(i,1,n){
  90. cin >> a[i].x >> a[i].y;
  91. a[i].p = 0;
  92. }
  93. rep1(i,n+1,2*n){
  94. cin >> a[i].x >> a[i].y;
  95. a[i].p = 1;
  96. }
  97. n<<=1;
  98. sort(a+1,a+1+n,cmp1);
  99. cout << fixed << setprecision(3) << double (sqrt(1.0*solve(1,n))) << endl;
  100. }
  101. return 0;
  102. }

【POJ 3714】Raid的更多相关文章

  1. 【POJ 3714】 Raid

    [题目链接] http://poj.org/problem?id=3714 [算法] 分治求平面最近点对 [代码] #include <algorithm> #include <bi ...

  2. bzoj 2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...

  3. 【链表】BZOJ 2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 382  Solved: 111[Submit][S ...

  4. BZOJ2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 284  Solved: 82[Submit][St ...

  5. BZOJ2293: 【POJ Challenge】吉他英雄

    2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 59[Submit][Stat ...

  6. BZOJ2287: 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 254  Solved: 140[Submit][S ...

  7. BZOJ2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 126  Solved: 90[Submit][Sta ...

  8. BZOJ2296: 【POJ Challenge】随机种子

    2296: [POJ Challenge]随机种子 Time Limit: 1 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 114  Solv ...

  9. BZOJ2292: 【POJ Challenge 】永远挑战

    2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 513  Solved: 201[Submit][ ...

随机推荐

  1. Android开发进度04

    1,今日:目标:实现登录和注册功能 2,昨天:完成登录和注册的界面以及后台数据库的操作 3,收获:会使用SQlite数据库的操作语句 4,问题:登录时出现问题(登录不上去)

  2. 常见的版本号及Springcloud的版本

    谈谈软件版本号的认识 一.常见版本号说明 举个瓜:2.0.3 RELEASE 2:主版本号,当功能模块有较大更新或者整体架构发生变化时,主版本号会更新 0:次版本号.次版本表示只是局部的一些变动. 2 ...

  3. 题解 CF1051F 【The Shortest Statement】

    这道题思路比较有意思,第一次做完全没想到点子上... 看到题目第一反应是一道最短路裸题,但是数据范围1e5说明完全不可能. 这个时候可以观察到题目给出了一个很有意思的条件,就是说边最多比点多20. 这 ...

  4. url中jsessionid的理解

    (1) 这是一个保险措施 因为Session默认是需要Cookie支持的 但有些客户浏览器是关闭Cookie的 这个时候就需要在URL中指定服务器上的session标识,也就是5F4771183629 ...

  5. Jenkins学习总结(4)——持续集成,持续交付,持续部署之间的区别

    经常会听到持续集成,持续交付,持续部署,三者究竟是什么,有何联系和区别呢? 假如把开发工作流程分为以下几个阶段: 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> ...

  6. ubuntu16.04环境下安装配置openface人脸识别程序

    参考http://blog.csdn.net/weixinhum/article/details/77046873 最近项目需要用到人脸训练和检测的东西,选用了OpenFace进行,因而有此文. 本人 ...

  7. javascript系列-class10.DOM(下)

    1.node节点(更详细的获取(设置)页面中所有的内容)         根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:   元素是节点的别称,节点包含元素当然节点还有 ...

  8. 4.git "Could not read from remote repository.Please make sure you have the correct access rights."解决方案

    转自:https://zhiku8.com/git-could-not-read-from-remote-repository.html 我们在使用git clone 或其他命令的时候,有时候会遇到这 ...

  9. UISrcoll控件简单介绍

    UISrcoll控件,简单的说就是让界面滑动 当使用uiimageview的时候,给控件设置图片素材时,图片的大小会根据控件的大小,自动做缩放 当使用uibutton的时候,如果是设置背景图,name ...

  10. spark集群体系结构