gym100753 - C Cake
题目链接
开始想着二分, 然后一直卡精度, 没有思考更简单的方法...~太菜了www~
先计算出s = 2是删去的面积\(S[2]\)那么 \(S[s] = 2^2/s^2 * S[2]\)
因为删去的面积是n个三角形面积的和,只改变s的情况下, 切去的三角形相似, 面积比为边长比的平方
const int maxn = 1e5 + 7;
double eps = 1e-10;
struct point {
double x, y;
} Point[maxn], P2[maxn];
double area_polygon(int n, point *p) {
double s1 = 0, s2 = 0;
for (int i = 0; i < n; i++)
s1 += p[(i + 1) % n].y * p[i].x, s2 += p[(i + 1) % n].y * p[(i + 2) % n].x;
return fabs(s1 - s2) / 2;
}
double a;
int n;
void solve() {
cin >> a >> n;
for (int i = 0; i < n; i++)
cin >> Point[i].x >> Point[i].y;
double tot = area_polygon(n, Point);
for (int i = 0; i < n; i++) {
P2[i].x = (Point[i].x + Point[(i + 1) % n].x) / 2;
P2[i].y = (Point[i].y + Point[(i + 1) % n].y) / 2;
}
a = 1 - a;
double are = tot - area_polygon(n, P2);
double ans = sqrt(are * 4 / (tot * a));
cout << fixed << setprecision(10) << ans << endl;
}
我看见 你

浙公网安备 33010602011771号