标签:nbsp block 弹性 ima math.h tor for open 技术分享
只有一个球时,这就是单纯的物理问题。
多个球时,所有的球都是一样的,两个球相撞后互相交换速度,可以视为直接互相穿过继续运动。
由于在碰撞时球的顺序是不会改变的,先落下的球始终在下面。 所以将计算出的每个球的高度进行排序就能知道每个球的最终位置。
最后按照R=0的结果加上2R*i就是每个球的高度。
#include<iostream> #include<math.h> #include<algorithm> #include<stdio.h> using namespace std; int N,H,R,T; const double g=10.0; double y[105]; double calc(int T) { if(T<=0) return H; double t=sqrt(2*H/g); int k=(int)(T/t); if(k%2==0) { double d=T-k*t; return H-g*d*d/2; } else { double d=k*t+t-T; return H-g*d*d/2; } } int main() { int round; cin>>round; while(round--) { cin>>N>>H>>R>>T; for(int i=0; i<N; i++) { y[i]=calc(T-i); } sort(y,y+N); for(int i=0; i<N; i++) { printf("%.2f%c",y[i]+2*R*i/100.0,i+1==N?‘\n‘:‘ ‘); } } return 0; }
标签:nbsp block 弹性 ima math.h tor for open 技术分享
原文地址:http://www.cnblogs.com/wangkaipeng/p/6501917.html