📄 4129433_ac_516ms_4936k.java
字号:
import java.util.*;
public class Main {
private Scanner in;
public static void main(String[] args) {
new Main().run();
}
private void run() {
int n;
double xa, ya, xb, yb;
in = new Scanner(System.in);
while (true) {
n = in.nextInt();
if (n == 0) {
break;
}
xa = in.nextDouble();
ya = in.nextDouble();
xb = in.nextDouble();
yb = in.nextDouble();
double ans = 0.00;
double size = 0.0;
for (int i = 0; i < n; i++) {
double len = in.nextDouble();
ans -= len * len / 2.0;
size += Math.sqrt(len * len * 2);
}
double min = 0, mid;
double max = 100000;
while (min + 1e-10 < max) {
mid = (min + max) / 2.0;
double x, y;
if (xa == 0) {
x = 0;y = mid;
} else {
if (ya == 0) {
x = mid;y = 0;
}
else {
x = mid * xa / (xa + ya);
y = mid * ya / (xa + ya);
}
}
double X, Y;
if (xb == 0) {
X = 0;Y = mid;
} else {
if (yb == 0) {
X = mid;Y = 0;
}
else {
X = mid * xb / (xb + yb);
Y = mid * yb / (xb + yb);
}
}
double dis = Math.hypot(x - X, y - Y);
if (Math.abs(dis - size) < 1e-10) {
double a = Math.hypot(X, Y);
double b = Math.hypot(x, y);
double p = (a + b + size) / 2.0;
ans += Math.sqrt(p * (p - a) * (p - b) * (p - size));
break;
}
if (dis < size) {
min = mid;
} else {
max = mid;
}
}
System.out.printf("%.3f\n", ans);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -