题解 | #【模板】实数域三分#

【模板】实数域三分

https://www.nowcoder.com/practice/695908ca830f4952ae6e2ed196fe5d64

观察函数,发现函数 F(x) 在区间 [l, r] 上是一个单峰函数,所以可以三分,注意 eps 设置到比给定标准小一点就行

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e5 + 5;
const double EPS = 1e-7;
int __t = 1, n;
double l, r;

struct Fx {
    int k, a, b;
};
vector<Fx> fxs;

double f(Fx fx, double x) {
    return abs(fx.k * x + fx.a) + fx.b;
}

double F(double x) {
    double sum = 0;
    for (auto fx : fxs)
        sum += f(fx, x);
    return sum;
}

void solve() {
    cin >> n >> l >> r;
    fxs.clear();
    fxs.resize(n);
    for (int i = 0; i < n; ++i)
        cin >> fxs[i].k >> fxs[i].a >> fxs[i].b;
    while (r - l > EPS) {
        double m1 = l + (r - l) / 3;
        double m2 = r - (r - l) / 3;
        if (F(m1) < F(m2))
            r = m2;
        else
            l = m1;
    }
    cout << fixed << setprecision(7) << F(l) << "\n";
}

int32_t main() {
#ifdef ONLINE_JUDGE
    ios::sync_with_stdio(false);
    cin.tie(0);
#endif
    cin >> __t;
    while (__t--)
        solve();
    return 0;
}

全部评论

相关推荐

10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务