luogu P1378 油滴擴充套件

2021-10-04 10:07:04 字數 1118 閱讀 4009

題面傳送門

這道題資料這麼小,一看就是搜尋,只是細節比較多。

我們思考怎麼通過乙個點的半徑確定另乙個點的半徑。兩點的歐幾里得距離顯然是(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 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢...