CodeForces

来源:互联网 发布:怎么克隆网站软件 编辑:程序博客网 时间:2024/06/05 20:59

一道浮点数二分答案的模板题

#include <cstdio>#include <iostream>#include <string>#include <cstring>#include <algorithm>#include <ctype.h>#include <cmath>#include <stdlib.h>#include <vector>#include <queue>#include <stack>#include <map>#include <set>using namespace std;#define inf 0x3f3f3f3f#define PI acos(-1.0)#define eps 1e-9#define me(x) memset(x,0,sizeof(x))#define scan(x) scanf("%d",&x)#define scan2(x,y) scanf("%d%d",&x,&y)#define STR(s) strlen(s)#define FOR(i,sta,n) for(i=sta;i<n;i++)#define FOR1(i,sta,n) for(i=sta;i<=n;i++)typedef long long ll;int main(){    double a,b,c,d;    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);    double l=0,r=1e9;    int j=0;    while(r-l>=eps&&j<=100000)    {        double mid=(r+l)/2;        double a1=a+mid,a2=a-mid,b1=b+mid,b2=b-mid,c1=c+mid,c2=c-mid,d1=d+mid,d2=d-mid;        double l1,r1,l2,r2;        l1=min(a1*d1,min(a1*d2,min(a2*d1,a2*d2)));        r1=max(a1*d1,max(a1*d2,max(a2*d1,a2*d2)));        l2=min(b1*c1,min(b1*c2,min(b2*c1,b2*c2)));        r2=max(b1*c1,max(b1*c2,max(b2*c1,b2*c2)));        if(l1<=r2&&l2<=r1)            r=mid;        else            l=mid;        j++;    }    printf("%.10f\n",l);    return 0;}


原创粉丝点击