枚举参考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
枚举和参考
---------------------------------

原文地址:https://www.cnblogs.com/jiangu66/p/3098174.html