二分法解方程

解方程

https://ac.nowcoder.com/acm/contest/5600/G

没什么可说的,记录一下写法,以及long double这种精度

引用自兰子大佬

很容易发现左边是一个单调增的函数,所以二分求解即可。值得注意的是如果用double可能出现tle的情况(实测double精度有问题,导致后面无限不动)。解决方法有两种,一种是换long double,另外一种是进行足够多次二分即可(例如1000次二分),可以避免tle的出现。

青竹大佬的

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 7, mod = 1e9 + 7;
const double eps = 1e-8;
typedef long long ll;
double a, b, c;
bool check(double x) {
    return pow(x, a) + b * (log(x)) >= c;
}
int main()
{
    scanf("%lf%lf%lf", &a, &b, &c);
    double left = 0, right = 1e9, ans = -1;
    while (right - left > eps) {
        double mid = (left + right) / 2;
        if(mid - left < eps) {
            ans = left;
            break;
        }
        if(check(mid)){
            right = mid;
        }
        else
            left = mid;
    }
    printf("%.8f\n", ans);
}

兰子大佬的

#include <bits/stdc++.h>
using namespace std;
#define ld long double
int a;
ld b, c;
ld bs(ld l, ld r) {
    if (r - l <= 1e-8) return l;
    ld mid = (r + l) / 2;
    ld res = 1;
    for (int i = 0; i < a; i++) res *= mid;
    res += b * log(mid);
    if (res < c) return bs(mid, r);
    return bs(l, mid);
}
int main() {
    cin >> a >> b >> c;
    printf("%.7Lf", bs(1, c));
}
全部评论

相关推荐

10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
WhiteAlbum...:学院本2中大厂垂直实习➕acm比赛 秋招0面试
点赞 评论 收藏
分享
09-17 17:09
门头沟学院 Java
雨忄:有人给出过解法,拖晚点去,然后到时候再找其他理由商量,既增加他们的筛人成本,不一定会给你收回offer ,也能占位避免工贼
秋招的嫡长offer
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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