您的位置:首页 > 其它

HDU-5826-physics-数学推导

2016-08-12 17:51 204 查看
题意:坐标轴有n个球,每个球有一个位置,初速度,方向,还有一个常数c,满足c=av a和v的加速度相同,若两个球相撞,则发生完全弹性碰撞。q个询问,问每次t时间的速度第k大的小球速度大小是多少、

思路:因为是发生完全弹性碰撞,则两个小球就相当于没有发生碰撞,继续前进。因为是求速度大小,所以和方向没有关系。有因为c=av ,可知,所有小球速度增长的曲线都是这个,初速度不同只是在曲线上的初位置不同,所以速度慢的永远不会追上速度快的。

所以问题就转换成原来速度第k大的小球,t秒时候的速度大小。很容易退出公式   vt=sqrt(2*c*t+v0*v0)

#include<bits/stdc++.h>
using namespace std;
long long v[111111];
int main()
{
int t;
int n;
double c;
scanf("%d",&t);
int x,y;
long long tt;
int k;
int q;
while(t--) {
scanf("%d%lf",&n,&c);
for(int i=1;i<=n;i++) {
scanf("%lld%d%d",&v[i],&x,&y);
}
sort(v+1,v+n+1);
scanf("%d",&q);
while(q--) {
scanf("%lld%d",&tt,&k);
printf("%.3f\n",sqrt(2*tt*c+v[k]*v[k]));
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学推导