洛谷 P1378 油滴擴充套件

2021-07-22 17:02:47 字數 1386 閱讀 6023

題目描述

在乙個長方形框子裡,最多有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思路很簡單,各種情況不同的只是順序,求一波全排列即可,有幾個坑點分享下。

1、如果r<0 並不是捨棄這種情況,而是令r=0 (坑40分)

2、圓周率一定要精確,用3.14會坑20分!

3、四捨五入的時候用printf(「%.0f\n」);(自帶四捨五入呢)。

(妙啊)

#include

#include

#include

#include

using

namespace

std;

const

double mx=1e9+7;

const

double pi=3.14159265;

int n,a[11];

double ans,xx1,xx2,yy1,yy2,x[11],y[11],r[11];

double calc()

double dis(int i,int j)

void dfs(int dep)

for(int i=1;i<=dep-1;i++)

r[a[dep]]=min(r[a[dep]],dis(a[i],a[dep])-r[a[i]]);

r[a[dep]]=min(r[a[dep]],min(min(x[a[dep]]-xx1,xx2-x[a[dep]]),min(y[a[dep]]-yy1,yy2-y[a[dep]])));

if(r[a[dep]]<0)

r[a[dep]]=0;

dfs(dep+1);

}int main()

printf("%.0f\n",(xx2-xx1)*(yy2-yy1)-ans);

return

0;}

洛谷P1378 油滴擴充套件

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

洛谷P1378 油滴擴充套件

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

洛谷P1378 油滴擴充套件

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