HDU 2899 (二分 或者 三分)

来源:互联网 发布:idm for mac破解版 编辑:程序博客网 时间:2024/06/06 12:57

水题

二分

#include <bits/stdc++.h>using namespace std;#define eps 1e-7double y;double f (double x) {    return 42*x*x*x*x*x*x + 48*x*x*x*x*x + 21*x*x + 10*x - y;}double f2 (double x) {    return 6*x*x*x*x*x*x*x + 8*x*x*x*x*x*x + 7*x*x*x + 5*x*x - y*x;}double solve () {    double l = 0.0, r = 100.0, mid;    while (r-l >= eps) {        mid = (l+r)/2.0;        if (f (mid) > eps) {            r = mid;        }        else if (f (mid) < -eps) {            l = mid;        }        else return mid;    }    return r;}int main () {    //freopen ("in", "r", stdin);    int t;    cin >> t;    while (t--) {        cin >> y;        double ans = solve ();        printf ("%.4f\n", f2 (ans));    }    return 0;}

三分

#include <bits/stdc++.h>using namespace std;#define eps 1e-7double y;double f (double x) {    return 6*x*x*x*x*x*x*x + 8*x*x*x*x*x*x + 7*x*x*x + 5*x*x - y*x;}double solve () {    double l = 0.0, r = 100.0, ll, rr;    while (r-l >= eps) {        ll = (2*l+r)/3, rr = (2*r+l)/3;        double p1 = f (ll), p2 = f (rr);        if (p2 > p1)            r = rr;        else l = ll;    }    return r;}int main () {    //freopen ("in", "r", stdin);    int t;    cin >> t;    while (t--) {        cin >> y;        double ans = solve ();        printf ("%.4f\n", f (ans));    }    return 0;}


0 0
原创粉丝点击