在乙個長方形框子裡,最多有n(0≤n≤6)個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?(不同的油滴不會相互融合)
注:圓的面積公式v=pi*r*r,其中r為圓的半徑。
第1行乙個整數n。
第2行為長方形邊框乙個頂點及其對角頂點的座標,x,y,x』,y』。
接下去n行,每行兩個整數xi,yi,表示盒子的n個點的座標。
以上所有的資料都在[-1000,1000]內。
一行,乙個整數,長方形盒子剩餘的最小空間(結果四捨五入輸出)
題目滿是屮點,不想說了
n只有6,直接無腦dfs,注意判斷點在盒子外的情況
#include
#include
#include
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define fill(x, t) memset(x, t, sizeof(x))
#define db double
#define inf 0x3f3f3f3f
#define pi 3.141592653
#define n 7
using
namespace
std;
struct recr;
struct circ[n];
int vis[n];
db ans = inf;
inline
int read()
ch = getchar();
}while (ch <= '9' && ch >= '0')
return x * v;
}inline db dist(cir a, cir b)
inline db cal(db r)
inline db max(db x, db y)
inline db min(db x, db y)
rep(i, 1, n)
}r = min(r, c[i].y - rc.d);
r = min(r, rc.u - c[i].y);
r = min(r, c[i].x - rc.l);
r = min(r, rc.r - c[i].x);
if (r > 0)else}}
}int main(void);
rep(i, 1, n);
}dfs(1, (r.u-r.d) * (r.r-r.l), r, n);
printf("%d\n",int(ans + 0.5));
return
0;}
洛谷 1378 油滴擴充套件
又有浮點數,桑心 話說lxt的14.0下取整竟然成了13?2333,害怕了。go to the problem 題目描述 在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢...
洛谷1378 油滴擴充套件 dfs進行回溯搜尋
題目中給出矩形的長寬和一些點,可以在每個點放油滴,油滴會擴充套件,直到觸碰到矩形的周邊或者其他油滴的邊緣,求出剩餘面積的最小值,就是求油滴面積的最大值。策略是dfs加上回溯,暴力求解。如下 1 include2 using namespace std 3 typedef unsigned int u...
洛谷 P1378 油滴擴充套件
題目描述 在乙個長方形框子裡,最多有n 0 n 6 個相異的點,在其中任何乙個點上放乙個很小的油滴,那麼這個油滴會一直擴充套件,直到接觸到其他油滴或者框子的邊界。必須等乙個油滴擴充套件完畢才能放置下乙個油滴。那麼應該按照怎樣的順序在這n個點上放置油滴,才能使放置完畢後所有油滴佔據的總體積最大呢?不同...