题意:给出几个初速度,初位置,以及小球运动的方向,速度和加速度一直在改变,但是速度和加速度的方向是同向,且一直满足C=V*a,问第k小速度是多少
思路:在比赛的时候就一直在想这个问题,速度和加速度一直都在改变,刚开始推出个公式,没有用微积分,结果错了,然后又想了想,用积分但是不知道怎么下手,直到比赛结束
题解:速度和加速度都在改变所以,我们来用微元法:考虑一段极小的时间间隔:dt. 速度增量为 dv . 则:dv=c/v0*dt
两边同时积分:dv的积分区间为[v0, v], dt的积分区间为[0, t].
那么结果为:v2=v02+2ct;
还有就是因为是完全弹性碰撞,所以速度大小不变的原先速度大的小球碰撞后交换速度和加速度,速度还是大,那么我们只需要对初速度排一下序即可,
代码如下:
用的c++输入输出超时了
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
const int N=100005;
int x,v1;
double v[N],vx;
int q;
double T;
int k;
int main()
{
int t,n;
double c;
scanf("%d",&t);
while(t--)
{
scanf("%d %lf",&n,&c);
for(int i=0;i<n;i++)
{
scanf("%lf%d%d",&v[i],&x,&v1);
}
sort(v,v+n);
scanf("%d",&q);
for(int j=0;j<q;j++)
{
scanf("%lf%d",&T,&k);
vx=sqrt((double)v[k-1]*v[k-1]+(double)2*c*T);
printf("%.3lf\n",vx);
}
}
return 0;
}