hdu4969 Just a Joke
题意:
有个点G在半径为R的圆O上做速率为v1的匀速圆周运动,点B从圆心出发,向点G做速率为v2的运动,已知O,B,G三点始终共线,求B和G相遇时走过的路程
由三点始终共线得B,G两点的角速度相同,w=v1/R
把v2分解为与半径平行的v2y和与半径垂直的v2x,设离圆心的距离为r,则v2x=w*r=v1*r/R
则v2y=sqrt(v22-(v1*r/R)2)
由v2y=dr/dt得:dt=dr/v2y
两边同时积分得:t(r)=R*arcsin(v1*r/(v2*R))/v1+C
则B点运动时间T为R*arcsin(v1/v2)/v1
知道了运动时间就好算路程了。。。s=v2*T
#include <math.h> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int T; double v1,v2,R,D; int main(){ for(scanf("%d",&T);T--;){ scanf("%lf%lf%lf%lf",&v1,&v2,&R,&D); double len=R*v2*asin(v1/v2)/v1; if(len-D>1e-9)puts("Why give up treatment"); else puts("Wake up to code"); } return 0; }