码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3684 Physics Experiment(弹性碰撞)

时间:2017-10-02 12:19:58      阅读:150      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!