bzoj1337 最小圓覆蓋

2021-08-15 06:18:39 字數 843 閱讀 3737

給出平面上n個點,n<=10^5.請求出乙個半徑最小的圓覆蓋住所有的點

新東西當然是要資瓷的,計算幾何都不太記得了,何況是這麼神奇的演算法

顯然乙個最優的圓一定過至少兩點,那麼我們預設1作為初始圓心。

每次加入第i個點的時候如果不能覆蓋全部說明第i個點一定在圓上,返回去列舉另乙個點做乙個新的圓重新判斷

如果由兩個點做出的圓仍然不滿足全覆蓋那麼找第三個點,使得三點確定乙個圓,這個圓就是前i個點的答案了

為了保證複雜度需要隨機亂排n個點。由於i個點中加入乙個點使得在圓外的機率大致是3/i的,因此時間複雜度期望是o(n)的

我大概是弱智選手了,推半天初中內容求直線方程交點,gg

#include 

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

const

int n=200005;

struct pos p[n],cir;

double r=0;

double sqr(double x)

double get_dis(pos a,pos b)

pos get_mid(pos a,pos b) ;}

pos get_center(pos a,pos b,pos c) ;

} else

if (a.y==c.y) ;

} else

return ret;

}int main(void) }}

printf("%.3lf\n", r);

return

0;}

bzoj1336 1337 最小圓覆蓋

time limit 1 sec memory limit 162 mbsec special judge submit 1473 solved 648 submit status discuss 給出n個點,讓你畫乙個最小的包含所有點的圓。先給出點的個數n,2 n 100000,再給出座標xi,y...

最小圓覆蓋

最小圓覆蓋。神奇的隨機演算法。當點以隨機的順序加入時期望複雜度是線性的。algorithm a 令ci表示為前i個點的最小覆蓋圓。當加入新點pi時如果pi不在ci 1裡那麼pi必定在ci的邊界上。b 再從新考慮這樣乙個問題,ci為前i個點最小覆蓋圓且p在ci的的邊界上!同理加入新點pi時如果p i不...

最小圓覆蓋

最小圓覆蓋問題 在乙個平面上,給出 n 個點,求包圍這些點的最小圓,輸出圓心及半徑。分析雖然可以用模擬退火或者三分套三分,這裡只講隨機增量法,隨機增量法是一種確定性演算法,隨機意義下均攤複雜度 o n 而且可以達到很高的精度 可達到 10 10 量級 有事實 如果點 p 不在集合 s 的最小圓覆蓋內...