hdoj 3400 三分

两次三分

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int x[5],y[5],v[5];

double cal(double x1,double x2,double y1,double y2)
{
    double tmp=(x1-x2)*(x1-x2);
    tmp+=(y1-y2)*(y1-y2);
    return sqrt(tmp);
}

double chk(double xx,double yy)
{
    double stx=x[3],sty=y[3],edx=x[4],edy=y[4];
    double txt1,txt2;
    while(1)
    {
            txt1=cal(xx,x[1],yy,y[1])/v[1]+cal(stx+(edx-stx)/3,x[4],sty+(edy-sty)/3,y[4])/v[2];
            txt1+=cal(xx,stx+(edx-stx)/3,yy,sty+(edy-sty)/3)/v[3];
            txt2=cal(xx,x[1],yy,y[1])/v[1]+cal(stx+(edx-stx)/3*2,x[4],sty+(edy-sty)/3*2,y[4])/v[2];
            txt2+=cal(xx,stx+(edx-stx)/3*2,yy,sty+(edy-sty)/3*2)/v[3];
            if(txt1<txt2)
            {
                edx=stx+(edx-stx)/3*2;
                edy=sty+(edy-sty)/3*2;
            }
            else
            {
                stx=stx+(edx-stx)/3;
                sty=sty+(edy-sty)/3;
            }
        if(fabs(txt1-txt2)<0.0001) break;
    }
    return txt1;
}


int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        for(int i=1;i<=4;i++)
        scanf("%d %d",&x[i],&y[i]);
        for(int i=1;i<=3;i++)
        scanf("%d",&v[i]);
        double stx=x[1],sty=y[1],edx=x[2],edy=y[2];
        double txt1,txt2;
        while(1)
        {
            txt1=chk(stx+(edx-stx)/3,sty+(edy-sty)/3);
            txt2=chk(stx+(edx-stx)/3*2,sty+(edy-sty)/3*2);
            if(txt1<txt2)
            {
                edx=stx+(edx-stx)/3*2;
                edy=sty+(edy-sty)/3*2;
            }
            else
            {
                stx=stx+(edx-stx)/3; 
                sty=sty+(edy-sty)/3;
            }
            if(fabs(txt1-txt2)<0.0001) break;
        }
        printf("%.2f\n",(txt1+txt2)/2);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值