洛谷 1378 油滴擴充套件

2021-08-09 12:43:55 字數 1556 閱讀 1003

*又有浮點數,桑心〒▽〒,話說lxt的14.0下取整竟然成了13?!2333,害怕了。。。

go to the problem

題目描述

在乙個長方形框子裡,最多有n(0≤n≤6)個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?(不同的油滴不會相互融合)

注:圓的面積公式v=pi*r*r,其中r為圓的半徑。

輸入輸出格式

輸入格式:

第1行乙個整數n。

第2行為長方形邊框乙個頂點及其對角頂點的座標,x,y,x』,y』。

接下去n行,每行兩個整數xi,yi,表示盒子的n個點的座標。

以上所有的資料都在[-1000,1000]內。

輸出格式:

一行,乙個整數,長方形盒子剩餘的最小空間(結果四捨五入輸出)

輸入輸出樣例

輸入樣例#1:

2 20 0 10 10

13 3

17 7

輸出樣例#1:

50這個題的題目意思其實是往乙個長方形容器裡依次放油滴,油滴呈圓形擴充套件,一旦觸碰到邊界或是其他油滴就停止。

需要double存資料。

每次放到乙個油滴時,都列舉一遍之前的油滴放的位置(因為資料範圍太小了)。對r取min,並且判斷邊界。注意r為負數時要把它變成0(相當於當前放的這個油滴在之前油滴的擴充套件範圍中,無法進行擴充套件,這點不注意會卡掉40分qaq)。

**

#include

#include

#include

#include

#include

using

namespace

std;

int n;

int used[10];

double l,r,u,d,ans=100000000;

const

double pi=3.1415926535898;

struct maplepoint[10];

struct edgea[10];

void dfs(int n,double sum)

for(int i=1;i<=n;++i)

if(!used[i])

r=min(r,min(u-point[i].y,point[i].y-d));

r=min(r,min(r-point[i].x,point[i].x-l));

if(r<0) r=0;

a[n+1]=(edge);

dfs(n+1,sum+pi*r*r);

used[i]=0;

a[n+1]=(edge);

}}int main()

油滴擴充套件 洛谷1378 搜尋

在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?不同的油滴不會...

洛谷 P1378 油滴擴充套件

題目描述 在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?不同...

洛谷P1378 油滴擴充套件

1 dfs的題寫著就是很有意思,資料很小,正兒八經的暴力題,如果不用深搜完全可以用n層for迴圈,n很小嘛,dfs找bug真的是很刺激啊 最後注釋了1行 就從50分到100分了 pragma gcc optimize 2 include using namespace std define pi a...