lightoj 1043 浮点数2分

来源:互联网 发布:文艺的网名 知乎 编辑:程序博客网 时间:2024/05/22 02:02

2分ad的可能值,本来推公式也可以,但是感觉有点麻烦。

10^-6的精度,2分50次就够了,2分20次反正挂了

#include<stdio.h>#include<cmath>int main(){    double ab,bc,ac;    double ad,de,ae;    double k;    int cas;    scanf("%d",&cas);    for(int T=1;T<=cas;T++)    {        scanf("%lf%lf%lf%lf",&ab,&ac,&bc,&k);        double p=(ab+ac+bc)/2;        double lb=0,ub=ab;        double s=sqrt(p*(p-ab)*(p-ac)*(p-bc));        for(int i=0;i<50;i++)        {            double mid=(lb+ub)/2;            ad=mid;            double kk=ad/ab;            de=bc*kk;            ae=ac*kk;            double pp=(ad+de+ae)/2;            double ss=sqrt(pp*(pp-ad)*(pp-de)*(pp-ae));            if(ss/(s-ss)>=k)                ub=mid;            else                lb=mid;        }        printf("Case %d: %.8lf\n",T,ad);    }}