$AcWing$

$Sol$

平面最近点对板子题,注意要求的是两种不同的点之间的距离.

$Code$

#include<bits/stdc++.h>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
#define yes(i,a,b) for(Rg int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2100000000
using namespace std;
il int read()
{
Rg int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int T,n;
struct node{int x,y;bool tp;}a[(int)1e5*+],tmp[(int)1e5*+];
il bool cmp(node x,node y){if(x.x==y.x)return x.y<y.y;return x.x<y.x;}
il bool cmp1(node x,node y){return x.y<y.y;}
il ll dis(node x,node y){db xx=x.x-y.x,yy=x.y-y.y;return xx*xx+yy*yy;}
il ll sol(int l,int r)
{
if(l>r || l==r)return inf;
if(l+==r)
{
if(a[l].tp!=a[r].tp){return dis(a[l],a[r]);}
else return inf;
}
Rg int mid=(l+r)>>,ct=;
ll mins=min(sol(l,mid),sol(mid+,r));
go(i,l,r){if((a[i].x-a[mid].x)*(a[i].x-a[mid].x)<=mins)tmp[++ct]=a[i];}
sort(tmp+,tmp+ct+,cmp1);
go(i,,ct)
go(j,i+,ct)
{
if((tmp[j].y-tmp[i].y)*(tmp[j].y-tmp[i].y)>mins)break;
if(tmp[i].tp!=tmp[j].tp)mins=min(mins,dis(tmp[i],tmp[j]));
}
return mins;
}
int main()
{
T=read();
while(T--)
{
n=read();
go(i,,n)a[i]=(node){read(),read(),};
go(i,,n)a[i+n]=(node){read(),read(),};
sort(a+,a+n*+,cmp);
printf("%.3lf\n",sqrt(sol(,*n)));
}
return ;
}

最新文章

  1. 【译】ASP.NET应用程序和页面生命周期
  2. GOLANG 基本数据类型 整型
  3. Java File类总结和FileUtils类
  4. 远程连接mysql,mysql如何开启远程连接
  5. cmake 学习笔记(二)
  6. JqueryAjax异步加载在ASP.NET
  7. ping 计算机全名,返回的不是IP地址
  8. Hive基础(2)---(启动HiveServer2)Hive严格模式
  9. Docker镜像管理
  10. 微信小程序创建一个新项目
  11. taro Object(...) is not a function 版本更新后,H5端运行出错
  12. Map&lt;String, Object&gt;转Object,Object转 Map&lt;String, Object&gt;
  13. CSS硬件加速的好与坏
  14. ASP.NET WebApi 基于OAuth2.0实现Token签名认证
  15. Linux 学习手记(2):Linux文件系统的基本结构
  16. 如何通过编译Linux内核打开IPVS(LVS)的debug模式
  17. SQL Server“复杂”概念之理解
  18. P2P通信原理与实现(C++)
  19. linux 下 ifcfg-eth0 配置/CentOS_minimal安装和开发环境部署
  20. Flask之flask-migrate 数据库迁移

热门文章

  1. TCP/IP网络编程 读书笔记1
  2. oracle函数 months_between(d1,d2)
  3. shell Usage
  4. oracle中=&gt;是什么意思呢?
  5. html--多媒体文件
  6. cf1234-div3
  7. 模板——伸展树 splay 实现快速分裂合并的序列
  8. Google Java编程风格指南(中文+原始)
  9. HDU 1087 Super Jumping....(动态规划之最大递增子序列和)
  10. Linux 内核/sbin/hotplug 工具