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;
}
posted @ 2021-03-22 13:23  naymi  阅读(47)  评论(0)    收藏  举报