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

【模板】实数域三分

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;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:05
点赞 评论 收藏
分享
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务