題面傳送門
這道題資料這麼小,一看就是搜尋,只是細節比較多。
我們思考怎麼通過乙個點的半徑確定另乙個點的半徑。兩點的歐幾里得距離顯然是(x1
−x2)
2+(y
1−y2
)2
\sqrt
(x1−x2
)2+(
y1−y
2)2
,那麼減去那個點的半徑d
dd,那麼可得式子為(x1
−x2)
2+(y
1−y2
)2−d
\sqrt -d
(x1−x2
)2+(
y1−y
2)2
−d,但如果這個點在已知點的半徑以內,那麼其面積就為0
00,所以進一步修改式子為max
((x1
−x2)
2+(y
1−y2
)2−d
,0
)max(\sqrt -d,0)
max((x
1−x2
)2+(
y1−y
2)2
−d,0
)**實現:
#include
#include
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using
namespace std;
int n,m,k,v[39]
;double d[39]
,ans,x[39]
,y[39
],lx,ly,rx,ry,p=
3.141592653
;inline
double
find
(int s)
}return tot;
}inline
void
dfs(
int x,
double tot)
for(
int i=
1;i<=n;i++)}
}int
main()
Luogu P1378 油滴擴充套件
題目描述 在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?不同...
Luogu P1378 油滴擴充套件
這是一道很值得反思的題目 首先關於double的基本用法就非常不熟悉 int 0.0 double int轉化成double的方法 printf 0.lf 直接四捨五入輸出int 關於題目其實並不是個很難的題目 關鍵就是搜尋計算狀態 就是比較得出r的過程 特判乙個r不用出來的答案直接當0計算 inc...
洛谷 1378 油滴擴充套件
又有浮點數,桑心 話說lxt的14.0下取整竟然成了13?2333,害怕了。go to the problem 題目描述 在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢...