HDU 3007 隨機增量法

2021-07-13 20:28:40 字數 1250 閱讀 1687

題目大意:給定平面上 n 個點,求最小圓覆蓋

我就是抄了個板而已…

q:為什麼是 o(

n)的

a:(搖頭搖頭搖頭

q:三角形外心怎麼求

a:不知道…

q:學這個有什麼用

a:(一臉懵逼

q:怎麼什麼都不知道→→

a:窩弱嘛tat

怎麼覺得自己又抽了=。=

三角形外心 (我知道泥萌都會。。。

因為到各點距離相等,有 (x

1−x)

2−(y

1−y)

2=(x

2−x)

2+(y

2−y)

2(x2

−x)2

+(y2

−y)2

=(x3

−x)2

+(y3

−y)2

化簡得到2(

x2−x

1)x+

2(y2

−y1)

y=x2

2+y2

2−x2

1−y2

1/a1

x+b1

y=c1

2(x3

−x2)

x+2(

y3−y

2)y=

x23+

y23−

x22−

y22/

a2x+

b2y=

c2 有

⎧⎩⎨x

=c1b

2−c2

b1a1

b2−a

2b1y

=a1c

2−a2

c1a1

b2−a

2b1

#include

#include

#include

#include

#define d double

#define n 505

#define pf(x) (x * x)

using namespace std

;int n;d r;

struct pointe[n],ans;

d dis(point a,point b)

point center(point a,point b,point c);}

void mcc()}}

}int main()

return 0

;}

HDU 3007 最小圓覆蓋

題意 給出平面上的一些點,要求用乙個最小的圓,把所有的點包圍起來。最小覆蓋圓,增量法 假設圓o是前i 1個點得最小覆蓋圓,加入第i個點,如果在圓內或邊上則什麼也不做。否,新得到的最小覆蓋圓肯定經過第i個點。然後以第i個點為基礎 半徑為0 重複以上過程依次加入第j個點,若第j個點在圓外,則最小覆蓋圓必...

hdu3007 最小覆蓋圓問題

題目 buried memory 最小圓覆蓋,很經典的問題。題目大概是,平面上n個點,求乙個半徑最小的圓,能夠覆蓋所有的點。如果要求乙個最小覆蓋圓,這個圓至少要由三個點確定。有一種演算法就是任意取三個點作圓,然後判斷距離圓心最遠的點是否在圓 內,若在,則完成 若不在則用最遠點更新這個圓。這裡不仔細介...

HDU3007 求解最小圓覆蓋 模擬退火?

這次先上 再證明 的可行性,感覺有點不像模擬退火,因為這個 借用的實際上是乙個完全單調的函式 只有乙個極值點,就是說只有乙個低谷,那個點實際上就是答案,就是全域性最優 就不自己寫 了,獻上網上找到的一段 這段 的思路其實就是先找乙個點作為起始點p,然後不斷找到和該點距離最遠的點a,然後將p向a慢慢挪...