• 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
    ",(txt1+txt2)/2);
        }
        return 0;
    }
    


  • 相关阅读:
    [背包]JZOJ 3232 【佛山市选2013】排列
    内核空间、用户空间、虚拟地址
    进程与线程的概念
    Python中字符串颜色
    socket编程
    模块与包
    常用模块
    面向对象进阶
    面向对象编程
    函数式编程
  • 原文地址:https://www.cnblogs.com/pangblog/p/3266505.html
Copyright © 2020-2023  润新知