「一本通 1.2 例 3」曲线

三分,主要解决单峰问题(求单峰),不过递增或递减
链接:https://loj.ac/p/10013
画图可以看出F(x)是一个单峰函数,在函数定义域内使用三分法即可。

int a[N], b[N], c[N];
int t, n;
inline double cal(double x) {
    double res = -INF;

    for (int i = 1; i <= n; i++) {
        res = max(res, a[i] * x * x + b[i] * x + 1.0 * c[i]);
    }

    return res;
}
int main() {
    t = read();

    while (t--) {
        n = read();

        for (int i = 1; i <= n; i++) {
            a[i] = read(), b[i] = read(), c[i] = read();
        }

        double l = 0, r = 1000;

        while (r - l >= eps) {
            double lmid = l + (r - l) / 3;
            double rmid = r - (r - l) / 3;

            if (cal(lmid) < cal(rmid))
                r = rmid;
            else
                l = lmid;
        }

        printf("%.4lf\n", cal(l));
    }
}
全部评论

相关推荐

勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务