天天看点

hdu 4968 Just a Joke 数学(积分) 2014 Multi-University Training Contest 9-1010

题意:

有一个女孩在一个半径为R的圆上以v1速度匀速跑步,一个男孩从圆心出发以v2的速度追赶女孩(v1<=v2),要求女孩,男孩和圆心要保持在一条直线上。由于男孩膝盖中了一箭,所以最多只能跑d距离,问男孩能否追的上女孩。

题解:

积分题目,高数没学好的路过,

hdu 4968 Just a Joke 数学(积分) 2014 Multi-University Training Contest 9-1010

。。

设男孩的径向速度为vy,切向速度为vx,vx^2+vy^2=v2^2 ——(1)

由于要圆心,男孩,女孩保持一条直线上,所以角速度相同,v1/R=v2——(2)

把(1)代入(2)可得vy=sqrt(v2^2-r^2*v1^2/R^2);

其中r为径向位移,vy为径向速度,dr/dt=r'=vy——(3)

把(3)代入(4)得dr/sqrt(v2^2-r^2*v1^2/R^2)=dt,

两边求导得R/v1*asin(v1*r/(v2*R))+C=t,将r=0,t=0代入得t=R/v1*asin(v1*r/(v2*R))

将r=R代入求得时间T,结果就是ans=v2*T=v2*R/v1*asin(v1/v2)>d?

求导过程

根据∫1/sqrt(1-x^2)dx=asin(x)可得

dr/sqrt(v2^2-r^2*v1^2/R^2)=v2*R/v1∫d(r*v1/(v2*R))/(v2*sqrt(1-(r*v1/(v2*R))^2))

=R/v1*asin(v1*r/(v2*R))=∫dt=t

代码:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <cctype>
using namespace std;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int v1,v2,r,d;
        scanf("%d%d%d%d",&v1,&v2,&r,&d);
        if(1.0*v2*r/v1*asin(1.0*v1/v2)>d)printf("Why give up treatment\n");
        else printf("Wake up to code\n");
    }
    return 0;
}
/*
设男孩的径向速度为vy,切向速度为vx,vx^2+vy^2=v2^2 ——(1)
由于要圆心,男孩,女孩保持一条直线上,所以角速度相同,v1/R=v2——(2)
把(1)代入(2)可得vy=sqrt(v2^2-r^2*v1^2/R^2);
其中r为径向位移,vy为径向速度,dr/dt=r'=vy——(3)
把(3)代入(4)得dr/sqrt(v2^2-r^2*v1^2/R^2)=dt,
两边求导得R/v1*asin(v1*r/(v2*R))+C=t,将r=0,t=0代入得t=R/v1*asin(v1*r/(v2*R))
将r=R代入求得时间T,结果就是ans=v2*T=v2*R/v1*asin(v1/v2)>d?

求导过程
根据∫1/sqrt(1-x^2)dx=asin(x)可得
dr/sqrt(v2^2-r^2*v1^2/R^2)=v2*R/v1∫d(r*v1/(v2*R))/(v2*sqrt(1-(r*v1/(v2*R))^2))
=R/v1*asin(v1*r/(v2*R))=∫dt=t

*/
           
hdu 4968 Just a Joke 数学(积分) 2014 Multi-University Training Contest 9-1010