【POJ】3684

来源:互联网 发布:淘宝十元包邮怎么赚钱 编辑:程序博客网 时间:2024/06/15 07:22

http://poj.org/problem?id=3684

《挑战程序设计竞赛》P158

N个球叠放在一起,每隔一秒最下边的球
** 就掉落下来,给定最下面球的底的高度,求T秒后每个球的底的离地高度,g=10m/s^2.

碰撞时两个球的速度交换了,实际上可以看做两个球互相穿越了彼此,但
** 又由于球的顺序不会变,所以求得的结果排序后就是答案。

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <algorithm>using namespace std;const double g=10.0;int C,N,H,R,T;double y[105];    //求的最终位置 double F(int T){    if (T<0) return H;    double t=sqrt(2*H/g);    int k=(int)(T/t);    double d;    if (k&1){        d=k*t+t-T;    }    else{        d=T-k*t;    }    return H-g*d*d/2;}int main(){    cin >> C;    while (C--){        cin >> N >> H >> R >> T;        for (int i=0;i<N;i++){            y[i]=F(T-i);        }        sort(y,y+N);        for (int i=0;i<N;i++){            printf("%.2lf%c",y[i]+2*R*i/100.0,i+1==N?'\n':' ');        }    }}
原创粉丝点击