[HDOJ 4969] Just a Joke [数学]

69 篇文章 0 订阅
2 篇文章 0 订阅

这道题就推个公式就完了...

已知点1以速率v1做半径为R的圆周运动,另一点2有恒定速率v2,从圆心开始运动,且圆心和这两点一直在一条直线上,求点2与点一重合所需要的路程是否小于d。

点2的移动路径大概是个螺旋线的样子,不过我们可以用点2的移动时间来计算点2的移动路程。

把点2的移动速度分解为切向速度和法向速度,由于点1的移动速度和半径恒定不变,所以点2的切向角速度恒定不变。

可以得到方程w^2r(t)^2+vv(t)^2=v2^2,其中,w为角速度,r(t)为t时刻点2距圆心距离,vv(t)为t时刻的点2的法向速度。可以知道r(t)为vv(t)对t积分得到的结果。

于是可以得到下式:w^2F^2(x)+f^2(x)=v2^2。

可以解出(其实是猜出来的..这家伙长的比较像椭圆的参数方程...),F(x)=v2/w*sin(wx)。

将w=v1/R带入,解得r(t)=v2*R/v1*sin(v1/R*t)。

于是在r(t)==R时,可知t=arcsin(v1/v2)*r/v1。

但是在v1==0时要特判,因为那时v2/v1不存在,中间的推到过程不成立,直接计算可知t=R/v2。

#include <cstring>
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
double const eps=1e-8;
double v1,v2,r,d;
double t;
int T;
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%lf%lf%lf%lf",&v1,&v2,&r,&d);
		if(v1==0) t=r/v2;
		double t=asin(v1/v2)*r/v1;
		if(t*v2<=d+eps) printf("Wake up to code\n");
		else printf("Why give up treatment\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值