hdu5826

题意:

在一条无限长水平直轨道上有n个相同的球,给出每个球的初速度、起始位置、方向.
给出若干询问,每次输出 t 秒时第 k 小的速度是多少.
对任意球的任一时刻而言,速度与加速度同方向,且它们的乘积为定值C.

题解:

撞击对于速度没有影响,则对于相对大小也没有影响

a*v=c;

dv/dt=a;

v*dv=c*dt;

两边求定积分即可

#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const double q = (1 + sqrt(5.0)) / 2.0;   // 黄金分割数
int t,n;
ll c,a[maxn];
int main ()
{
    cin>>t;
    while (t--)
    {
      scanf("%d%lld",&n,&c);
      ll x1,x2,x3;
      for(int i=1;i<=n;i++){
            scanf("%lld%lld%lld",&x1,&x2,&x3);
            a[i]=x1;
      }
      sort(a+1,a+1+n);
      int q;
      scanf("%d",&q);
      while(q--){
            int t,k;
            scanf("%d%d",&t,&k);
            double v=2*t*c+a[k]*a[k];
            v=sqrt(v);
            printf("%.3lf\n",v);
      }
    }
}

 

posted @ 2016-08-11 19:33  十目  阅读(176)  评论(0编辑  收藏  举报