Hurry Up(三分)

本文介绍了一道算法题目,探讨了如何计算从任意位置到目的地的最短时间,包括直接跑步和乘坐出租车两种方式。提供了两种解决方案,一种是通过三分法进行优化,另一种是通过枚举法求解。

 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;

}




<think>好的,我现在需要解决用户的问题:如何在Python中分两行原样输出两个特定的句子。用户给出的例子是: he's a pirate She said, "Hurry up." 输出格式要求严格,必须原样显示这两句话,包括标点和大小写。用户还提到输入格式无,输出格式要完全匹配。 首先,我需要考虑Python中如何正确输出包含单引号和双引号的字符串,同时确保换行处理正确。这两个句子各自有特殊的字符: 第一句“he's a pirate”包含单引号,在Python中如果使用单引号定义字符串的话,里面的单引号需要转义,或者可以用双引号包裹整个字符串,这样里面的单引号就不需要转义了。例如:print("he's a pirate")。 第二句“She said, "Hurry up."”里面包含双引号,同样,如果使用双引号定义字符串的话,内部的双引号需要转义,或者可以用单引号包裹整个字符串,这样内部的双引号不需要转义。例如:print('She said, "Hurry up."')。 接下来需要考虑换行的问题。用户希望两句话分别在两行输出,也就是每个print语句输出一行。所以在代码中应该有两个独立的print语句,每个对应一个句子。这样每个print默认会换行,符合要求。 然后,我需要验证这种写法是否正确,是否会导致语法错误。例如,如果用双引号包裹第二个句子,内部的引号需要转义,但用单引号包裹会更简洁,避免转义。同样,第一个句子用双引号包裹的话,单引号无需转义,这样更清晰。 因此,正确的代码应该是: print("he's a pirate") print('She said, "Hurry up."') 这样就能正确输出两行,且保留所有标点和大小写,无需任何转义字符,代码也更易读。 另外,用户可能没有考虑到转义字符的问题,所以需要确保给出的解决方案不会让用户混淆。例如,如果用户尝试自己写的时候错误地使用了相同的引号而没有转义,会导致语法错误。因此,在解释时应该强调使用不同引号包裹字符串来避免转义。 总结一下,正确的做法是分别用双引号和单引号定义两个字符串,这样内部的引号无需转义,每个print语句输出一行,结果完全符合用户的要求。</think>要在Python中分两行原样输出指定的句子,需注意**引号的转义处理**和**换行控制**。以下是具体方法: --- ### **步骤说明** 1. **输出第一句 `he's a pirate`** - 句子包含单引号 `'`,需用双引号包裹整个字符串避免转义: ```python print("he's a pirate") ``` 2. **输出第二句 `She said, "Hurry up."`** - 句子包含双引号 `"`,需用单引号包裹整个字符串避免转义: ```python print('She said, "Hurry up."') ``` --- ### **完整代码** ```python print("he's a pirate") print('She said, "Hurry up."') ``` --- ### **运行结果** 直接运行代码会输出: ``` he's a pirate She said, "Hurry up." ``` --- ### **关键点** - **引号处理**: - 用双引号包裹含单引号的字符串(如 `"he's..."`),用单引号包裹含双引号的字符串(如 `'She said, "..."'`),无需手动转义。 - **换行控制**: - 每个 `print()` 默认换行,直接分两行代码即可实现两行输出。 --- ### **常见错误** 若写成 `print('he's a pirate')` 或 `print("She said, "Hurry up."")`,会因引号冲突导致语法错误。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值