在乙個長方形框子裡,最多有n(0≤n≤6)個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?(不同的油滴不會相互融合)
注:圓的面積公式v=pi*r*r,其中r為圓的半徑。
第1行乙個整數n。
第2行為長方形邊框乙個頂點及其對角頂點的座標,x,y,x』,y』。
接下去n行,每行兩個整數xi,yi,表示盒子的n個點的座標。
以上所有的資料都在[-1000,1000]內。
一行,乙個整數,長方形盒子剩餘的最小空間(結果四捨五入輸出)
輸入 #1複製
220 0 10 10
13 3
17 7
輸出 #1複製
50思路
列舉第 i 個油滴與邊界和其他油滴之間的距離,列舉出面積最大的情況即可
code
#include
<
bits/stdc++.h
>
#define
dbg(x) cout << #x <<"=
"<< x << endl
#define
eps1e-8
#define
piacos
(-1.0
)using
namespace
std;
typedef
long
long ll;
const
int inf =
0x3f3f3f3f
;template
<
class
t>
inline
void
read(t
&res)
namespace
_buff
return
ib ==
ie ?-1
:*ib++;}}
intqread
()if
(c =='-
')for(; c >='0
'&& c <='9
'; c =
getc
())return pos ? ret :
-ret;
}const
int maxn =
1e3+7;
int n;
struct
node
a[maxn
];bool vis[maxn];
double dis[maxn][maxn];
double lx, rx, dy, uy;
double area;
double ans =0;
double
dist
(node a,
node b)
bool
check
(int id)
for(
int i =
1; i <= n;
++i )}}
return
true;
}void
dfs(
int cnt,
double sum)
// dbg(ans);
for(
int i =
1; i <= n;
++i )
}vis[i]
=1;if
(a[i
].r<0)
dfs(
cnt +1
,sum +a[
i].r*a[
i].r*
pi);
vis[i]
=0;}
}return;}
intmain
()if
(dy > uy)
area =
(rx - lx)
*(uy - dy);
for(
int i =
1; i <= n;
++i )
for(
int i =
1; i <= n;
++i )
}dfs(1
,0.0
);// dbg(area);
// dbg(ans);
printf("
%d\n"
,(int
)(area - ans +
0.5));
return0;
}
P1378 油滴擴充套件
在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?不同的油滴不會...
P1378 油滴擴充套件
在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?不同的油滴不會...
題解 P1378 油滴擴充套件
在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?不同的油滴不會...