Overview

给出平面上两两不重合的$n$个整点, 求每个点到它在其他$n-1$个点的最近临点的欧几里得距离的平方.

Solution

k-d tree 模板题.

关于k-d tree, 见这篇博客.

Implementation

#include <bits/stdc++.h>
#define lson id<<1
#define rson id<<1|1
#define sqr(x) (x)*(x)
using namespace std;
using LL=long long;
const int N=1e5+5; // K-D tree: a special case of binary space partitioning trees
int DIM=2, idx; struct Node{
LL key[2];
bool operator<(const Node &rhs)const{
return key[idx]<rhs.key[idx];
}
void read(){
for(int i=0; i<DIM; i++)
scanf("%lld", key+i);
}
LL dis2(const Node &rhs)const{
LL res=0;
for(int i=0; i<DIM; i++)
res+=sqr(key[i]-rhs.key[i]);
return res;
}
}p[N], _p[N]; Node a[N<<2]; // K-D tree
bool f[N<<2]; // [l, r)
void build(int id, int l, int r, int dep){
if(l==r) return; // error-prone
f[id]=true, f[lson]=f[rson]=false;
// select axis based on depth so that axis cycles through all valid values
idx=dep%DIM;
int mid=l+r>>1;
// sort point list and choose median as pivot element
nth_element(p+l, p+mid, p+r);
a[id]=p[mid];
build(lson, l, mid, dep+1);
build(rson, mid+1, r, dep+1);
} LL mi; void query(const Node &p, int id, int dep){
int dim=dep%DIM;
int x=lson, y=rson;
// left: <, right >=
if(p.key[dim]>=a[id].key[dim])
swap(x, y); if(f[x]) query(p, x, dep+1);
LL cur=p.dis2(a[id]);
if(cur && cur<mi) mi=cur; if(f[y] && sqr(a[id].key[dim]-p.key[dim])<mi)
query(p, y, dep+1);
} int main(){
int T;
scanf("%d", &T);
for(int n; T--; ){
scanf("%d", &n);
for(int i=0; i<n; i++){
p[i].read();
_p[i]=p[i]; //error-prone
}
build(1, 0, n, 0);
for(int i=0; i<n; i++){
mi=LLONG_MAX;
query(_p[i], 1, 0); //error-prone
printf("%lld\n", mi);
}
}
return 0;
}

HDU #2966 In case of failure的更多相关文章

  1. hdu 2966 In case of failure k-d树

    题目链接 给n个点, 求出每个点到离它最近的点的距离. 直接建k-d树然后查询就可以  感觉十分神奇... 明白了算法原理但是感觉代码还不是很懂... #include <bits/stdc++ ...

  2. 【HDOJ】2966 In case of failure

    KD树,这东西其实在ML经常被使用,不过30s的时限还是第一次见. /* 2966 */ #include <iostream> #include <string> #incl ...

  3. In case of failure

    In case of failure http://acm.hdu.edu.cn/showproblem.php?pid=2966 Time Limit: 60000/30000 MS (Java/O ...

  4. 【 HDU2966 】In case of failure(KD-Tree)

    BUPT2017 wintertraining(15) #5E HDU - 2966 题意 给平面直角坐标系下的n个点的坐标,求离每个点和它最近点的距离的平方.\(2 \le n \le 10^5\) ...

  5. kd树 hdu2966 In case of failure

    传送门:pid=2966" target="_blank">点击打开链接 题意:给n个点,求对于每一个点到近期点的欧几里德距离的平方. 思路:看鸟神博客学kd树劲啊 ...

  6. 【HDU 2966 k-dimensional Tree 入个门】

    ·“k-d树是一种分割k维数据空间的数据结构.主要应用于多维空间关键数据的范围搜索和最近邻搜索……”’'   ·英文题,述大意:      给出平面内n个点(n<=100000,0<=x, ...

  7. HDU2966 In case of failure(浅谈k-d tree)

    嘟嘟嘟 题意:给定\(n\)个二维平面上的点\((x_i, y_i)\),求离每一个点最近的点得距离的平方.(\(n \leqslant 1e5\)) 这就是k-d tree入门题了. k-d tre ...

  8. K-D树

    一般用来解决各种二维平面的点对统计,也许一般非正解? 没时间慢慢写了,打完这个赛季后补细节 建树板子: #include <cstdio> #include <locale> ...

  9. Scala For Java的一些参考

          变量 String yourPast = "Good Java Programmer"; val yourPast : String = "Good Java ...

随机推荐

  1. PHP核心编程知识点

    一.PHP基本语法 PHP标记:一共有四种,只推荐使用第一种 语句结束符:分号 注释:行注释(//  #)和块注释(/*   */),注释的规范 二.常见的输出语句 print echo var_du ...

  2. C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  3. 中国式IT的项目

    这篇文章用来总结一下2013,同时也分享一下我对中国IT项目现状的一些看法. 我先从项目说起.这里的项目主要是指的软件开发项目.我们分别从项目中的甲方和乙方谈谈,看看这两者对于项目.对应IT的认识和观 ...

  4. Android开发环境部署

    引言   在windows系统中安装Android的开发环境,将分为五个步骤来完成: 第一步:安装JDK 第二步:配置Windows上JDK的变量环境 第三步: 下载安装Eclipse 第四步:下载安 ...

  5. ajax post(copy part)

    srcpage var q=new XMLHttpRequest(); var data='usr=weidiao&pwd=haha'; data=encodeURI(data); var u ...

  6. 关于最近折腾的ubuntu12.10

    win7旗舰正版up1 UltraISO + ubuntu-12.10-desktop-i386.iso + 4GKingston = 启动U盘 USB HDD 启动 进入ubuntu桌面,安装,磁盘 ...

  7. webpack进阶之插件篇

    一.插件篇 1. 自动补全css3前缀 autoprefixer 官方是这样说的:Parse CSS and add vendor prefixes to CSS rules using values ...

  8. ContentObserver监听数据库·变化

    //短信Uri Uri smsUri = Uri.parse("content://sms"); //使用ContentReslover注册·监听器 getContentResol ...

  9. IntelliJ_13_配置tomcat

    一.下载tomcat7并解压 http://tomcat.apache.org/download-70.cgi http://apache.fayea.com/tomcat/tomcat-7/v7.0 ...

  10. inline-block 左边固定,右边自适应

    <body> <div class="col-md-4 left"> <div class="logo">默沙东盲讲< ...