凸包最近距離 旋轉卡殼

2021-09-26 01:43:46 字數 1923 閱讀 9582

original link -

題意:

給出兩個順時針排序好的凸包,求這兩個凸包的最近點對距離。

解析:

旋轉卡殼的另外乙個應用。

先找出p1p1

p1中的最低點,p2p2

p2中的最高點,然後旋轉(順時針逆時針隨意,要保證兩個切線旋轉方向相同)。

每次p1

p1p1

的切線旋轉到與一條邊重合,找出p2p2

p2中離這條切線最近的點

1. 如果只有乙個點,那麼就是點到線的距離

2. 否則就是兩條邊4個點的最近距離

顯然這樣會漏掉情況,所以要對p2p2

p2也做一遍。

**:

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

5e4+9;

const

double eps =

1e-7

;struct point };

typedef point p;

typedef point point;

typedef point vector;

vector operator

+(vector a, vector b)

vector operator

-(vector a, vector b)

vector operator

*(vector a,

double p)

vector operator

/(vector a,

double p)

intdcmp

(double x)

bool

operator==(

const point &a,

const point &b)

double

cross

(p a, p b)

double

dot(p a, p b)

double

length

(vector v)

double

distance

(p a, p b)

point p1[maxn]

, p2[maxn]

;int n1, n2;

#define rep(i,a,b) for(int i=a;i<=b;i++)

double

distancetoseg

(point p, point a, point b)

double

segdistancetoseg

(point a, point b, point c, point d)

double

rotatecalipers

(p *p1,

int n1, p *p2,

int n2)

return ans;

}int

main()

}

單詞最近距離

有一篇文章內含多個單詞,現給定兩個單詞,請設計乙個高效演算法,找出文中這兩個單詞的最短距離 即最少相隔的單詞數,也就是兩個單詞在文章中位置的差的絕對值 給定乙個string陣列article,代表所給文章,同時給定文章的單詞數n和待查詢的兩個單詞x和y。請返回兩個單詞的最短距離。保證兩個單詞均在文中...

t010 最近距離

time limit 1 second memory limit 32 mb 聚類方法要求將空間中的點集,按照一點的方式進行歸類,要求每一類中的點集相互之間的距離足夠的 近 聚類的一般方法是選取某乙個點p,並用乙個距離r作為度量,只要空間中的點q距離點p的距離不超過r時,我們說點q和點p是屬於同一類...

凸包問題 旋轉卡殼

1978年,m.i.shamos在 computational ceometry 中介紹了一種尋找凸多邊形直徑的線性演算法。1.支撐線 如果一條直線l,通過凸多邊形p的乙個頂點,且多邊形在這條直線的一側,稱l是p的支撐線。2.對踵 zhong,三聲 點 如果過凸包上的兩個點可以畫一對平行直線,使凸包...