POJ 3684 Physics Experiment(弹性碰撞)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3684 Physics Experiment(弹性碰撞)相关的知识,希望对你有一定的参考价值。

题目链接: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(弹性碰撞)的主要内容,如果未能解决你的问题,请参考以下文章

POJ3684-Physics Experiment 弹性碰撞

POJ 3684 Physics Experiment(弹性碰撞)

Physics Experiment POJ 3684(弹性碰撞)

弹性碰撞 poj 3684

poj 1852&3684 题解

Greedy:Physics Experiment(弹性碰撞模型)(POJ 3848)