最近点对模板题,算法导论P591有具体的证明,我不会实现  - -!,有一个博主写的很好,具体的证明可以见博客:http://blog.csdn.net/zhang20072844/article/details/6776386

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define MAXN 100010

struct node
{
    double x, y;
}p[MAXN*2], ym[MAXN*2];

int n;

int cmpx(const node a, const node b)
{
    return a.x < b.x;
}

int cmpy(const node a, const node b)
{
    return a.y < b.y;
}

double dist(node a, node b)
{
    return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
}

double getmind(node *p, int l, int r)
{
    if(l == r) return 1e50;      //只有一个点 
    if(l+1 == r) return dist(p[l], p[r]); //只有两个点 
    int mid = (l+r)/2;
    double ans = min(getmind(p, l,mid), getmind(p, mid+1, r));  //注意是getmind(p, l, mid); 
    int yn = 0;
    for(int i = l; i <= r ; i++)   //divide
    {
        if(fabs(p[i].x - p[mid].x) <= ans)
        {
            ym[yn++] = p[i];
        }
    }
    sort(ym, ym+yn, cmpy); //预排序 
    for(int i = 0; i < yn; i++)
    {
        for(int j = i+1; j < yn; j++)
        {
            if(ym[j].y - ym[i].y >= ans) break;  //if(|y1-y2| >= ans) break;
            ans = min(ans, dist(ym[i], ym[j]));
        }
    }
    return ans;
}

int main()
{
    int T;
    while(scanf("%d", &n) && n)
    {
        for(int i = 0; i < n; i++)
        {
            scanf("%lf%lf", &p[i].x, &p[i].y);
        }
        sort(p, p+n, cmpx);
        double ans = getmind(p, 0, n-1);
        if(ans <= 10000)
        {
            printf("%.4lf\n", ans);
        }
        else printf("INFINITY\n");
    }
    return 0;
}

转载于:https://www.cnblogs.com/g0feng/archive/2012/10/18/2730193.html

UVA 10245 The Closest Pair Problem相关推荐

  1. uva 10245 The Closest Pair Problem_枚举

    题意:求任意两点之间的距离的最少一个距离 思路:枚举一下就可以了 #include <iostream> #include<cstdio> #include<cmath& ...

  2. 【CodeForces - 312C】The Closest Pair (思维)

    题干: Currently Tiny is learning Computational Geometry. When trying to solve a problem called "T ...

  3. 数据结构与算法笔记:分治策略之Greatest Slice,2-Way Merge,Counting Inversions,linearSelect,Diameter,Closest Pair

    Divide and Conquer 分而治之概述 分而治之,就像是团队合作,将一项工作分解成不同的成员去处理 一般情况,我们面临的规模比较大,用n来表示,我们会把它分为若干个任务来同步进行处理 一般 ...

  4. UVA - 524:Prime Ring Problem

    Prime Ring Problem 来源:UVA 题目 A ring is composed of n (even number) circles as shown in diagram. Put ...

  5. UVa 1640 (计数) The Counting Problem

    题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个"模板",进行区间的分块,加速运算. 因为 ...

  6. UVa 729 The Hamming Distance Problem【枚举排列】

    题意:给出数组的长度n,给出h,表示这个数组里面含有h个1,求其所有的排列 用next_permutation就可以了 1 #include<iostream> 2 #include< ...

  7. 求最近点对算法分析 closest pair algorithm

    这个帖子讲得非常详细严谨,转一波. http://blog.csdn.net/lishuhuakai/article/details/9133961 转载于:https://www.cnblogs.c ...

  8. UVA 12465 - The Turanga Leela Problem(求某个数的约数个数)

    题目链接 算是 有公式把.一个数的可以化成,素数相乘的形式,约数个数 = 每个素数的次幂+1的乘积. 知道了这个,还有3个需要注意....我竟然错了9次...哭死了.... 注意 1 的情况特判.   ...

  9. tp5 mysql缓存_tp5.0 SHOW COLUMNS FROM 生成数据表字段缓存

    TP5.0 生成数据表字段缓存 =控制台执行以下命令= 1.生成指定数据库的所有表字段缓存 php think optimize:schema --db databaseName 2.生成指定数据表的 ...

最新文章

  1. SAP S4 OP/Cloud大乱斗
  2. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
  3. 美国国家航空航天局宣布发现地球2.0
  4. ORA-39083: + ORA-00439: 未启用功能
  5. 对Canvas的研究
  6. TCP 之 RST 原因分析
  7. 论文阅读课5-DocRED: A Large-Scale Document-Level Relation Extraction Dataset(大规模文档集关系提取数据集
  8. Java之HashMap.values()转List时的错误和正确操作
  9. nodejs实践录:使用curl测试post请求
  10. 《计算机组成原理》BCD码 8421编码原理剖析
  11. OleDb驱动调用Oracle存储过程出错:ORA-06502
  12. angular同源策略禁止读取_Redis5.0数据淘汰策略详解(最新版本,面试常问)
  13. Java - 生成健康证图片,各种模板图片
  14. macd ema java源码_MACD指标源码汇总,成功率极高,买卖点提前一目了然!
  15. 用户注册时图片验证码和短信验证码的逻辑
  16. JWT、OOS、Oauth三种登录验证机制
  17. Android 高级开发 JNI NDK 介绍与使用
  18. 江苏计算机二级报名一年几次,江苏计算机二级每年考几次
  19. 小米应用市场ASO关键词设置
  20. scrollHeight实测

热门文章

  1. getopt:命令行选项、参数处理
  2. 图像处理之应用篇-大米计数续
  3. 应用量化时代 | 微服务架构的服务治理之路
  4. 医疗AI技术火热,但其商业模式的落脚点究竟在哪
  5. 大数据如何改变商业管理
  6. 子数组最大值设计02
  7. 如何提高在家办公的效率?
  8. 计算机网络基础(路由原理)
  9. python IDE- IDLE
  10. 公司A、公司B、公司C……