1. 程式人生 > >杭電 5826

杭電 5826

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=5826

題目大意:給出各個小球的初始位置,初速度,方向,保證加速度*速度始終等於c,小球碰撞為完全彈性碰撞,求每次t秒後第k小的初速度的小球速度。

題解:首先分析題意可知初始速度與方向並無關係,完全彈性碰撞即碰撞後兩小球交換速度,如同隔空穿過,由動能定理1/2mv^2-1/2mv0^2=mat,   v=sqrt(2*c*t+v0^2)。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>

using namespace std;

int a[100005];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,c,i;
        scanf("%d%d",&n,&c);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            int s1,s2;
            scanf("%d%d",&s1,&s2);
        }
        int m;
        scanf("%d",&m);
        sort(a,a+n);
        double res;
        for(i=0;i<m;i++)
        {
            int t,k;
            scanf("%d%d",&t,&k);
            res=sqrt(2.0*c*t+1.0*a[k-1]*a[k-1]);
            printf("%.3f\n",res);
        }
    }
    return 0;

}