new file: P1378.cpp
This commit is contained in:
1 parent
1254ed1739
commit
abbe51ca27
2 files changed
+96
No files matched your search
@@ -0,0 +1,54 @@
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
int n;
|
||||
pair<int, int> dro[10];
|
||||
bool used[10];
|
||||
double siz;
|
||||
double r[10];
|
||||
int x, y, xx, yy;
|
||||
double calc(int a, int b) {
|
||||
return sqrt((dro[a].first - dro[b].first) * (dro[a].first - dro[b].first) +
|
||||
(dro[a].second - dro[b].second) *
|
||||
(dro[a].second - dro[b].second)) -
|
||||
r[b];
|
||||
}
|
||||
double ans = 4e6;
|
||||
void dfs(int now, int cnt) {
|
||||
used[now] = 1;
|
||||
double maxd = min(min(abs(dro[now].first - x), abs(dro[now].first - xx)),
|
||||
min(abs(dro[now].second - y), abs(dro[now].second - yy)));
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
if (used[i] && i != now)
|
||||
maxd = min(maxd, calc(now, i));
|
||||
}
|
||||
if (maxd < 0)
|
||||
maxd = 0;
|
||||
r[now] = maxd;
|
||||
siz -= 3.1415926 * maxd * maxd;
|
||||
if (cnt == n) {
|
||||
ans = min(ans, siz);
|
||||
|
||||
} else {
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
if (!used[i])
|
||||
dfs(i, cnt + 1);
|
||||
}
|
||||
}
|
||||
siz += 3.1415926 * maxd * maxd;
|
||||
used[now] = 0;
|
||||
}
|
||||
int main() {
|
||||
scanf("%d", &n);
|
||||
scanf("%d%d%d%d", &x, &y, &xx, &yy);
|
||||
x += 1000, y += 1000, xx += 1000, yy += 1000;
|
||||
siz = abs((x - xx) * (y - yy));
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
scanf("%d%d", &dro[i].first, &dro[i].second);
|
||||
dro[i].first += 1000, dro[i].second += 1000;
|
||||
}
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
dfs(i, 1);
|
||||
}
|
||||
printf("%.0lf\n", ans);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
# P1378 油滴扩展
|
||||
|
||||
## 题目描述
|
||||
|
||||
在一个长方形框子里,最多有 $N$ 个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界。必须等一个油滴扩展完毕才能放置下一个油滴。那么应该按照怎样的顺序在这 $N$ 个点上放置油滴,才能使放置完毕后所有油滴占据的总面积最大呢?(不同的油滴不会相互融合)
|
||||
|
||||
注:圆的面积公式 $S = \pi r^2$,其中 $r$ 为圆的半径。
|
||||
|
||||
## 输入格式
|
||||
|
||||
第一行,一个整数 $N$。
|
||||
|
||||
第二行,四个整数 $x, y, x', y'$,表示长方形边框一个顶点及其对角顶点的坐标。
|
||||
|
||||
接下来 $N$ 行,第 $i$ 行两个整数 $x_i, y_i$,表示盒子内第 $i$ 个点的坐标。
|
||||
|
||||
## 输出格式
|
||||
|
||||
一行,一个整数,长方形盒子剩余的最小空间(结果四舍五入输出)。
|
||||
|
||||
## 输入输出样例 #1
|
||||
|
||||
### 输入 #1
|
||||
|
||||
```
|
||||
2
|
||||
20 0 10 10
|
||||
13 3
|
||||
17 7
|
||||
|
||||
```
|
||||
|
||||
### 输出 #1
|
||||
|
||||
```
|
||||
50
|
||||
|
||||
```
|
||||
|
||||
## 说明/提示
|
||||
|
||||
对于 $100\%$ 的数据,$1 \le N \le 6$,坐标范围在 $[-1000, 1000]$ 内。
|
||||
Reference in new issue
Block a user