• 枚举参考Hurry Up(三分)


    在写这篇文章之前,xxx已经写过了几篇关于改枚举参考主题的文章,想要了解的朋友可以去翻一下之前的文章

         http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1175

        每日一道理
    感叹人生,是因为曾经没有过轰轰烈烈的壮举,觉得渺小,觉得平庸,似乎生活过于简单,简单得让人感觉烦躁。没有大言不惭地说过将来,只是比较现实地握住了现在,我想,这是一条路,每个人所必须踏上的一次旅程,曾经看到过这样一句话:成长的过程漫长却充实,自毁的过程短暂却留下一生痛苦,人生可以说是一次考验,何去何从取决于自我。

    (2013湘潭邀请赛标题)

    Hurry Up

    Accepted : 62

     

    Submit : 251

    Time Limit : 1000 MS

     

    Memory Limit : 65536 KB

    Problem Description

    GG is some what afraid of his MM. Once his MM asks, he will always try his best to rush to their home. 
    Obvious, he can run home in straight line directly. Alternatively, he can run to the main road and call the taxi.
    You can assume there is only one main road on the x-axis, with unlimited length.
    Given the initial location of GG and his destination, please help to ask the minimize time to get home.
    GG will always run at the fixed speed of vr, and the taxi can move at the fixed speed of vt 
    You can also assume that, only GG reach the main road, he can catch the taxi immediately. And the taxi will go towards home ( not necessay along the road ). 
    Bisides, GG can run arbitrary length, and pay arbitrarily for the taxi. 

    P.S. MM: abbr. Ma Ma

    Input

    Multiple test cases. First line, an integer T ( 1 ≤ T ≤ 2000 ), indicating the number of test cases. 
    For each test cases, there are 6 integers x1, y1, x2, y2, vr, vt in a line. 
    ( -1000 <= x1, y1, x2, y2 <= 1000, 1 <= vr < vt <= 1000 ) 
    (x1, y1) : the initial location of GG 
    (x2, y2) : the destination location of GG 
    vr: GG's run speed 
    vt: taxi's speed

    Ouput

    For each test case, output a real number with 2 digits after the arithmetic point. It is the shorest time for GG to reach home.

    Sample Input

    2

    1 1 2 2 1 2

    1 1 2 2 1 7

    Sample Output

    1.41

    1.32


    Source

    XTU OnlineJudge

    Submit Solution ]

    //正解一

    memory      time             length
    
    1064 KB  31 MS      1123 B
    
    #include<string.h>
    
    #include<stdio.h>
    
    #include<math.h>
    
    #include<algorithm>
    
    #include <iostream>
    
    using namespace std;
    
    const double ep=1e-10;
    
    double vr,vt;
    
    double xt,x2;
    
    double y2,yt;
    
    double lenth(double a1,double b1,double a2,double b2)
    
    {
    
        return sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
    
    }
    
    double caltime(double x)
    
    {
    
        return (lenth(xt,yt,x,0)/vr+lenth(x2,y2,x,0)/vt);
    
    }
    
    int main()
    
    {
    
        int T,i;
    
        double t1,t2,r,l;
    
        while(scanf("%d",&T)!=EOF)
    
        {
    
            for(i=0;i<T;i++)
    
            {
    
                scanf("%lf%lf%lf%lf",&xt,&yt,&x2,&y2);
    
                scanf("%lf%lf",&vr,&vt);
    
                t1=lenth(xt,yt,x2,y2)/vr;
    
                r=xt;
    
                l=x2;
    
                  for(int i=0;i<100;i++)//这么多是参考某位大神的
    
               {  double m1=l + (r-l)/3;
    
                 double m2=r - (r-l)/3;
    
                 if(caltime(m1)<=caltime(m2))  r=m2;
    
                 else  l=m1;
    
               }
    
                 t2=caltime(l);
    
                  t1=t1<t2? t1:t2;
    
                 printf("%.2lf\n",t1);
    
            }
    
        }
    
        return 0;
    
    }
    
    正解二:/
    
    枚举法
    
    memory      time             length
    1256 KB     593 MS      1176 B
    
    
    //枚举法,枚举到0.1
    
    #include<string.h>
    
    #include<stdio.h>
    
    #include<math.h>
    
    #include<algorithm>
    
    #include <iostream>
    
    using namespace std;
    
    const double ep=1e-10;
    
    double vr,vt;
    
    double xt,x2;
    
    double y2,yt;
    
    double lenth(double a1,double b1,double a2,double b2)
    
    {
    
        return sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
    
    }
    
    double caltime(int x)
    
    {    (double)x;
    
        return (lenth(xt,yt,x,0)/vr+lenth(x2,y2,x,0)/vt);
    
    }
    
    int main()
    
    {
    
        int T,i,j;
    
        double t1,t2,min,max,t;
    
        while(scanf("%d",&T)!=EOF)
    
        {
    
            for(i=0;i<T;i++)
    
            {
    
                scanf("%lf%lf%lf%lf",&xt,&yt,&x2,&y2);
    
                xt=xt*10.0;
    
                yt=yt*10.0;
    
                x2=x2*10.0;
    
                y2=y2*10.0;
    
                scanf("%lf%lf",&vr,&vt);
    
                vr=vr*10.0;
    
                vt=vt*10.0;
    
    
                t1=lenth(xt,yt,x2,y2)/vr;
    
                max=xt>x2? xt:x2;
    
                min=xt<x2? xt:x2;
    
                t2=1000000.0;
    
                for(j=(int)min;j<=(int)max;j++)
    
                {
    
                  t=caltime(j);
    
                  if(t2>t)
    
                  t2=t;
    
    
    
                }
    
    
                  t1=t1<t2? t1:t2;
    
                 printf("%.2lf\n",t1);
    
            }
    
    
        }
    
        return 0;
    
    }
    
    错误:
    
    //三分法
    
    #include<string.h>
    
    #include<stdio.h>
    
    #include<math.h>
    
    #include<algorithm>
    
    #include <iostream>
    
    using namespace std;
    
    const double ep=1e-10;
    
    double vr,vt;
    
    double xt,x2;
    
    double y2,yt;
    
    double lenth(double a1,double b1,double a2,double b2)
    
    {
    
        return sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));
    
    }
    
    double caltime(double x)
    
    {
    
        return (lenth(xt,yt,x,0)/vr+lenth(x2,y2,x,0)/vt);
    
    }
    
    double solve(double l,double r)//三分法
    
    {
    
        double m;
    
        double mm;
    
        while(l+ep<r)
    
        {
    
            m=(l+r)/2.0;
    
            mm=(m+r)/2.0;
    
            if(caltime(m)<caltime(mm))//取最小值
    
             r=mm;
    
             else
    
             l=m;
    
        }
    
        return l;
    
    }
    
    int main()
    
    {
    
        int T,i;
    
        double t1,t2;
    
        while(scanf("%d",&T)!=EOF)
    
        {
    
            for(i=0;i<T;i++)
    
            {
    
                scanf("%lf%lf%lf%lf",&xt,&yt,&x2,&y2);
    
                scanf("%lf%lf",&vr,&vt);
    
                t1=lenth(xt,yt,x2,y2)/vr;
    
                 t2=caltime(solve(xt,x2));
    
                  t1=t1<t2? t1:t2;
    
                 printf("%.2lf\n",t1);
    
            }
    
    
        }
    
        return 0;
    
    }
    
    
    
    

    文章结束给大家分享下程序员的一些笑话语录: Borland说我很有前途,Sun笑了;Sun说我很有钱,IBM笑了;IBM说我很专业,Sybase笑了;Sybase说我数据库很牛,Oracle笑了;Oracle说我是开放的,Linux笑了;Linux说我要打败Unix,微软笑了;微软说我的系统很稳定,我们都笑了。

    --------------------------------- 原创文章 By
    枚举和参考
    ---------------------------------

  • 相关阅读:
    Flex 布局语法教程
    Uni-App
    springBoot框架中几个层(dto、dao、service、controller)之间的关系
    delphi Restful:客户端实现的四种方式及其比较
    Node.js安装及环境配置之Windows篇
    MySQL 8.0.18安装教程(windows 64位)
    JDK下载和安装
    【转载】G1垃圾回收器详解
    【转载】单线程Redis性能为何如此之高?
    快速开发框架天梭(Tissot)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3098174.html
Copyright © 2020-2023  润新知