POJ 3714 Raid 最近點對

2021-05-27 13:11:19 字數 955 閱讀 3207

求最近點對,只不過這兩個點需要屬於不同的集合,那麼就給兩個集合的點分別標記乙個id號,在計算時,兩個集合合併起來,並排序,遞迴求解,只不過,求兩點距離時,如果id號是同一集合的,直接返回乙個很大的數就行了,這樣就跟求乙個集合的最近點對沒什麼區別了。

/*

id: sdj22251

prog: calfflac

lang: c++

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define max 2000000000

#define loca

using namespace std;

struct node

p[200005],p1[100005],p2[100005];

bool cmp(node x, node y)

double dist(node x, node y)

double divide_conquer(int low, int high)

}for(i = mid + 1; i <= high; i++)

}for(i = 0; i < cnt1; i++)

}return d;

}int main()

for(i = n; i < 2 * n; i++)

n = n * 2;

sort(p, p + n, cmp);

printf("%.3f\n", divide_conquer(0, n - 1));

}return 0;

}

POJ 3714 Raid 最近點對

求最近點對,只不過這兩個點需要屬於不同的集合,那麼就給兩個集合的點分別標記乙個id號,在計算時,兩個集合合併起來,並排序,遞迴求解,只不過,求兩點距離時,如果id號是同一集合的,直接返回乙個很大的數就行了,這樣就跟求乙個集合的最近點對沒什麼區別了。id sdj22251 prog calfflac ...

poj 3714 Raid(平面最近點對)

給出兩個點集,然後求兩個點集之間的最近距離。思路 開始用的旋轉卡殼,兩個點集先求凸包,這樣就變成了兩個凸包間最近距離,但是死活tle,然後就換了平面最近點對來做,把兩個點集標記一下,判斷下是不是在同乙個點集裡就行了 include include include using namespace st...

POJ 3714 Raid 平面最近點對

題目大意 給出兩個集合的點,問這兩個集合之間最近的點對的距離是多少。思路 先要知道平面最近點對的分治演算法,剩下的就簡單了,只需要在更新答案的時候判斷一下兩個點是否屬於兩個集合就可以了。分治演算法總是十分神奇的。對於平面最近點對,首先按照x座標排序,然後遞迴進行分治,每次分治時,先獲得分治得到的結果...