题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007

  简单裸题,测测模板,G++速度快了不少,应该是编译的时候对比C++优化了不少。。

 //STATUS:G++_AC_1703MS_5004KB
 #include <functional>
 #include <algorithm>
 #include <iostream>
 //#include <ext/rope>
 #include <fstream>
 #include <sstream>
 #include <iomanip>
 #include <numeric>
 #include <cstring>
 #include <cassert>
 #include <cstdio>
 #include <string>
 #include <vector>
 #include <bitset>
 #include <queue>
 #include <stack>
 #include <cmath>
 #include <ctime>
 #include <list>
 #include <set>
 #include <map>
 using namespace std;
 //#pragma comment(linker,"/STACK:102400000,102400000")
 //using namespace __gnu_cxx;
 //define
 #define pii pair<int,int>
 #define mem(a,b) memset(a,b,sizeof(a))
 #define lson l,mid,rt<<1
 #define rson mid+1,r,rt<<1|1
 #define PI acos(-1.0)
 //typedef
 typedef __int64 LL;
 typedef unsigned __int64 ULL;
 //const
 ;
 const int INF=0x3f3f3f3f;
 ,STA=;
 ;
 ;
 const double OO=1e15;
 ]={-,,,};
 ]={,,,-};
 ]={,,,,,,,,,,,,};
 //Daily Use ...
 inline int sign(double x){return (x>EPS)-(x<-EPS);}
 template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
 template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
 template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
 template<class T> inline T Min(T a,T b){return a<b?a:b;}
 template<class T> inline T Max(T a,T b){return a>b?a:b;}
 template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
 template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
 template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
 template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
 //End
 struct Node{  //id为nod排序后的编号值,index为排序前的标号值(随便自己定义)
     double x,y;
     int id,index;
     Node(){}
     Node(double _x,double _y,int _index):x(_x),y(_y),index(_index){}
 }nod[N],temp[N];

 int n;

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

 bool cmpxy(Node a,Node b)  //先按x排序,然后按y排序
 {
     return a.x!=b.x?a.x<b.x:a.y<b.y;
 }

 bool cmpy(Node a,Node b)  //按y排序
 {
     return a.y<b.y;
 }

 pii Closest_Pair(int l,int r)  //返回排序后点的编号
 {
     ==r)return pii(l,r);   //只有一个点或者两个点
     double d,d1,d2;
     ;
     //左右两边最小距离点的编号
     pii pn1=Closest_Pair(l,mid);
     pii pn2=Closest_Pair(mid+,r);
     //左右两遍的最小距离
     d1=(pn1.first==pn1.second?OO:dist(nod[pn1.first],nod[pn1.second]));
     d2=(pn2.first==pn2.second?OO:dist(nod[pn2.first],nod[pn2.second]));
     pii ret;
     d=Min(d1,d2);
     ret=d1<d2?pn1:pn2;
     //找出在mid-d,mid+d之间的点
     ;i<=r;i++){
         if(fabs(nod[mid].x-nod[i].x)<=d){
             temp[k++]=nod[i];
         }
     }
     //合并两边,求最小距离
     sort(temp,temp+k,cmpy);
     ;i<k;i++){
         ;j<k && fabs(temp[j].y-temp[i].y)<d;j++){
             if(dist(temp[i],temp[j])<d){
                 d=dist(temp[i],temp[j]);
                 ret=make_pair(temp[i].id,temp[j].id);
             }
         }
     }

     return ret;
 }

 void Init()   //初始化点
 {
     int i;
     double x,y;
     ;i<n;i++){
         scanf("%lf%lf",&x,&y);
         nod[i]=Node(x,y,i);
     }
     sort(nod,nod+n,cmpxy);
     ;i<n;i++)nod[i].id=i;  //排序后节点编号
 }

 int main(){
  //   freopen("in.txt","r",stdin);
     int T,i,j;
     while(~scanf("%d",&n) && n)
     {
         Init();
         pii ans=Closest_Pair(,n-);

         printf();
     }
     ;
 }

HDU-1007 Quoit Design 平面最近点对的更多相关文章

  1. HDU 1007 Quoit Design 平面内最近点对

    http://acm.hdu.edu.cn/showproblem.php?pid=1007 上半年在人人上看到过这个题,当时就知道用分治但是没有仔细想... 今年多校又出了这个...于是学习了一下平 ...

  2. HDU 1007 Quoit Design | 平面分治

    暂鸽 #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #d ...

  3. HDU 1007 Quoit Design(经典最近点对问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1007 Quoit Design Time Limit: 10000/5000 MS (Java/Oth ...

  4. HDU 1007 Quoit Design【计算几何/分治/最近点对】

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. hdu 1007 Quoit Design (最近点对问题)

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  6. hdu 1007 Quoit Design 分治求最近点对

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  7. HDU 1007 Quoit Design(二分+浮点数精度控制)

    Quoit Design Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  8. HDU 1007 Quoit Design

    传送门 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Des ...

  9. HDU 1007 Quoit Design(计算几何の最近点对)

    Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...

  10. hdu 1007 Quoit Design(分治法求最近点对)

    大致题意:给N个点,求最近点对的距离 d :输出:r = d/2. // Time 2093 ms; Memory 1812 K #include<iostream> #include&l ...

随机推荐

  1. html学习第三天—— 第11章 盒子模型 div

    盒模型--边框(一) 盒子模型的边框就是围绕着内容及补白的线,这条线你可以设置它的粗细.样式和颜色(边框三个属性). 如下面代码为div来设置边框粗细为2px.样式为实心的.颜色为红色的边框: div ...

  2. 用SQL语句获得一个存储过程返回的表

    1. 定义一个表变量 declare @table table(ReportType nvarchar(30),ReportPath nvarchar(200),ParaCnt int,DataAre ...

  3. virtualenv中ImportError: No module named django

    问题现象:在代码py文件中,import django 报错,但是在python shell中直接执行这个语句没错, 网上搜索了下,自己测试了下,确定原因是由于使用了python中的virtualen ...

  4. React笔记_(5)_react语法4

    ajax 数据应用场景 在真实的开发环境中,拿到了产品需求,第一件事不是逼着后台开发人员先完成,然后前端再介入开发,这样太浪费时间. 正确的做法是跟后端人员先商量好接口名称,请求参数,返回的数据格式等 ...

  5. SAP接口编程 之 JCo3.0系列(01):JCoDestination

    SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...

  6. WM_INITDIALOG与WM_CREATE消息的区别

      WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕(可以安全的使用这个窗口了,例如在它上面画控件等).在响应WM_CREATE消息响应函数的时候,对话框及子控件还未创建完成,亦是说 ...

  7. hdu 1561

    有依赖的背包,用树形dp解 #include<iostream> #include<cstdio> #include<cstring> #include<al ...

  8. 济南最新公交线路一览(BRT)

    济南最新公交线路一览(BRT) 济南BRT1路 高速公交线路 黄岗路东5:30-21:30 全福立交桥西5:30-21:30 票价1元,刷卡9折,月票有效 高速公交公司 去程:黄岗路东(BRT) - ...

  9. 无法删除 C_PAN.GHO: 访问被拒绝 解决办法

    右击“C-PAN.GHO",属性->安全(如果没有安全选项卡,可以在工具->文件夹选项->查看中将”使用简单头文件共享“前的对勾去掉),这时”添加“和”删除“按钮应该是不可 ...

  10. React 学习(三) ---- state 和 事件处理函数

    在上两节中,我们讲述了props, 组件使用props进行渲染,但是这是一次性的, props渲染完成之后就不做任何事情了,但是现实中却不是这样的,当我们点击购物车上的加减按钮时,数量会自动加1或减1 ...