二維幾何 平面最近點對

2021-09-27 06:39:08 字數 1211 閱讀 4134

存個模板:

是用分治寫的時間複雜度 nlogn

但是本題好像還有一種玄學做題法:

我們充分發揚人類智慧型:

將所有點全部繞原點旋轉同乙個角度,然後按x座標排序

根據數學直覺,在隨機旋轉後,答案中的兩個點在陣列中肯定不會離得太遠

所以我們只取每個點向後的5個點來計算答案

這樣速度快得飛起,在n=1000000時都可以在1s內卡過。。。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define llu unsigned ll

using

namespace std;

const

int maxn=

200100

;const

double eps=

1e-8

;const

double dnf=

1e20

;struct point};

double

dis(point a,point b)

point p[maxn]

;point temp[maxn]

;bool

cmpx

(const point &a,

const point &b)

bool

cmpy

(const point &a,

const point &b)

double

closest_pair

(int l,

int r)

sort

(temp,temp+cnt,cmpy)

;for

(int i=

0;i)for

(int j=i+

1;j.y-temp[i]

.y) d=

min(d,

dis(temp[i]

,temp[j]))

;return d;

}int

main

(void

)

平面最近點對

求點集中的最近點對有以下兩種方法 設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。1 蠻力法 適用於點的數目比較小的情況下 1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2 ...

平面最近點對

求點集中的最近點對有以下兩種方法 設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。1 蠻力法 適用於點的數目比較小的情況下 1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2對...

平面最近點對

求點集中的最近點對有以下兩種方法 設p1 x1,y1 p2 x2,y2 pn xn,yn 是平面上n個點構成的集合s,設計演算法找出集合s中距離最近的點對。1 蠻力法 適用於點的數目比較小的情況下 1 演算法描述 已知集合s中有n個點,一共可以組成n n 1 2對點對,蠻力法就是對這n n 1 2對...