最小圓覆蓋。
1、列舉第乙個點,考慮當前圓是否包含了這個點,如果沒有,則把圓變成以這個點為圓心,半徑為0的圓。
2、列舉第二個點,考慮圓是否包含了這個點,如果沒有,則把圓變成以這兩個點的中點為圓心,半徑為兩點距離一半的圓。
3、列舉第三個點,節點是否在圓內,如果不在,直接把圓變成這三個點的外接圓。具體怎麼做,就是解方程(文化課應該在九年級數學講到過)
記得要打亂點的順序!期望時間複雜度為\(o(n)\)(具體為什麼我也不知道,但是或許可以感性地理解一下。。。)
另外,如果不想掉精度太嚴重,還是建議除法都移項,換成乘法。
update:2019.4.4
**如下:
#include#include#include#include#include#include#define eps 1e-15
#define maxn 500010
using namespace std;
int n;
double r;
struct nodenode[maxn],o;
inline double dist(node a,node b)
inline void solve(node a,node b,node c)
int main()}}
}}
printf("%.2lf %.2lf %.2lf\n",o.x,o.y,r);
return 0;
}
AHOI2012 樹屋階梯
卡特蘭數!至於為什麼是卡特蘭數,就稍微說那麼一兩句吧 對於乙個高度為 i 的階梯,我們可以在左上角填乙個高度為 k 的階梯,右下角填乙個高度為 i 1 k 的階梯剩下的我們用乙個大的長方形填上就可以啦 比如這個樣子 之後還需要高精,但是為了簡單好寫,這裡可以分解質因數,之後就變成另乙個單精度乘高精了...
AHOI2012 樹屋階梯
有無窮多的任意尺寸矩形,搭建乙個 n 級正階梯有多少種方案?任意大小為 i 的階梯,都可以由左上角放一塊大小為 j 的,右下角放一塊大小為 i j 1 的來構成,每一塊內部遞迴填充,對應 catalan 數 實現需要高精乘單精,高精除單精 include using namespace std co...
AHOI2012 樹屋階梯 題解(卡特蘭數)
暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的樹屋露營。小龍分配的樹屋建立在一顆高度為n 1尺 n為正整數 的大樹上,正當他發愁怎麼爬上去的時候,發現旁邊堆滿了一些空心四方鋼材 如圖1.1 經過觀察和測量,這些...