标签:mes == 处理 释放 targe time scanf 计算 const
题目链接:http://poj.org/problem?id=3684
题意:N个半径为R的小球放在距离地面H高度的管道里,从0秒释放一个小球开始,每秒钟释放一个小球,问最后每个小球距离地面多远(按高度从低到高输出)
题解:先不考虑半径关系,直接模拟过程,两个小球如果碰撞反弹相当于穿过,直接可以计算就可以了,然后分一下奇数偶数判断是向下还是向上,处理一下。
1 #include <cmath> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 6 const double g=10.0; 7 int C,N,H,R,T; 8 double res[111]; 9 10 double cal(int time){ 11 if(time<0) return 1.0*H; 12 double t=sqrt(2.0*H/g); 13 int k=(int)(1.0*time/t); 14 if(k%2){ 15 double d=k*t+t-1.0*time; 16 return 1.0*H-0.5*g*d*d; 17 } 18 else{ 19 double d=1.0*time-k*t; 20 return 1.0*H-0.5*g*d*d; 21 } 22 } 23 24 void solve(){ 25 for(int i=0;i<N;i++){ 26 res[i]=cal(T-i); 27 } 28 sort(res,res+N); 29 for(int i=0;i<N;i++){ 30 if(i==0) printf("%.2f",res[i]+2.0*i*R/100.0); 31 else printf(" %.2f",res[i]+2.0*i*R/100.0); 32 } 33 printf("\n"); 34 } 35 36 int main(){ 37 scanf("%d",&C); 38 while(C--){ 39 scanf("%d %d %d %d",&N,&H,&R,&T); 40 solve(); 41 } 42 return 0; 43 }
POJ 3684 Physics Experiment(弹性碰撞)
标签:mes == 处理 释放 targe time scanf 计算 const
原文地址:http://www.cnblogs.com/Leonard-/p/7619904.html