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,三聲 點 如果過凸包上的兩個點可以畫一對平行直線,使凸包...