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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #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; } |