HDU 5826-physics(数学)

HDU 5826-physics

题目原址

[http://acm.hdu.edu.cn/showproblem.php?pid=5826]

题意

模拟多个相同小球一维运动碰撞的物理情景,这些小球都满足 v ⋅ a = C ( C 是 常 数 ) ( v 与 a 方 向 相 同 ) v\cdot{a}=C(C是常数)(v与a方向相同) va=C(C)(va) ,碰撞为完全弹性碰撞,给出每个小球的初始位置 x i x_{i} xi,速度 v i v_{i} vi,方向 d i ( − 1 或 1 ) d_{i}(-1或1) di(11),询问 t t t 秒后第 k k k 小的速度(不是第 k k k 个小球)。

题解

  1. 方程 v ⋅ a = C v\cdot{a}=C va=C 说明小球速度逐渐增大,加速度逐渐减小。而且假若小球之间无碰撞,他们每一时刻的速度大小顺序与初始时刻的速度大小顺序相同。
  2. 完全弹性碰撞说明小球之间的碰撞只是交换速度而不改变速度大小,所以即便小球之间存在碰撞,他们的速度大小顺序也不会因碰撞而改变
  3. 根据数学微积分:
    a = d v d t = C v a=\frac{dv}{dt}=\frac{C}{v} a=dtdv=vC v ⋅ d v = C ⋅ d t v\cdot{dv}=C\cdot{dt} vdv=Cdt v 2 2 ∣ v 0 v = C t ∣ 0 t \left.\frac{v^{2}}{2}\right|_{v_{0}}^{v}=\left.Ct\right|_{0}^{t} 2v2v0v=Ct0t v = 2 C t + v 0 2 v=\sqrt{2Ct+v_{0}^{2}} v=2Ct+v02 上式则是 t t t 秒时速度 v v v 的表达式。

实现

#include <stdio.h>
#include <algorithm>
#include <math.h>
const int maxn = (int)1e5+5;
int v[maxn];
int i,j,k;
int main(){
	int T;
	scanf("%d",&T);
	int n,c;
	int m,t,k;
	while(T--){
		scanf("%d %d",&n,&c);
		for(i=0;i<=n;i++)
			scanf("%d %d %d",&v[i],&j,&k);
		std::sort(v,v+n);
		scanf("%d",&m);
		for(i=1;i<=m;i++){
			scanf("%d %d",&t,&k);
			printf("%.3lf\n",sqrt(2.0*c*t+1.0*v[k-1]*v[k-1]));
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值