(模板)hdoj1007(分治求平面最小點對)

2022-08-21 18:30:17 字數 1015 閱讀 3108

題意:給定n個點,求平面距離最小點對的距離除2。

思路:分治求最小點對,對區間[l,r]遞迴求[l,mid]和[mid+1,r]的最小點對,取兩者中的小者設為d。然後處理乙個點在左區間,乙個點在右區間的情況。乙個點p在左區間,如果使它與右區間q乙個點距離小於d的話,那麼p到mid的距離一定小於的,q也是,且p和q的縱座標之差小於d。可以證明這樣的q點最多6個。那麼我們把符合到mid距離小於d的點按y排序後,遍歷一遍更新d即可。

ac**:

#include#include

#include

#include

using

namespace

std;

const

int maxn=1e5+5

;int

n,id[maxn],cnt;

const

double inf=1e30;

struct

nodept[maxn];

bool

operator

< (const node& a,const node&b)

bool cmp(int a,int

b)double dist(const node& a,const node&b)

double fenzhi(int l,int

r) t1=l1;

l1=mid+1,r1=r;

while(l1<=r1)

t2=r1;

for(int i=t1;i<=t2;++i)

id[++cnt]=i;

sort(id+1,id+cnt+1

,cmp);

for(int i=1;ii)

for(int j=i+1;j<=cnt&&(pt[id[j]].y-pt[id[i]].y)j)

d=min(d,dist(pt[id[i]],pt[id[j]]));

returnd;}

intmain()

return0;

}

hdoj 1007 臨近點對演算法模板

思想 分治 所有點按x座標排序 每次把整體分成兩邊求出兩邊所有點中的最短距離然後求出中間一下片點的最短距離最後合併得總體最短距離 include include include include include define ll long long define pi acos 1.0 define...

演算法導論 分治法 最近點對 HDOJ1007

hdoj1007的原題目是求出在不同時套中兩個玩具的前提下,圓圈的最大半徑。問題翻譯過來就是求解最近點對的問題,這個問題是經典的分治法問題。參考部落格 毫無疑問,通過暴力手段列舉所有的點對並計算這些點對的距離,找出最小的一組,可以得到最後的結果。但是,這道題的資料規模非常大,所以,這種傳統的方法肯定...

HDOJ1007解題報告 二分思維題

題目概述 給出n個點,求n個點兩兩之間的最小距離。大致思路 直接暴力的話複雜度是o n 這個複雜度在n 100000的時候是無法承受的,那麼我們就需要降低複雜度了。對平面內任一鉛垂線來說,這個最小距離要麼在這條線左,要麼在這條線右,要麼跨過這條線,這個時候想到了什麼?二分!考慮用二分來解決這個題目,...