链接:http://poj.org/problem?id=3684
相同的球体,完全弹性碰撞。发生速度交换。所以,完全可以忽略球的碰撞,就当它去穿过处理就可以了
#include <iostream> #include <cmath> #include <algorithm> #include <cstdio> #define MAX_N 100 using namespace std; const double g =10.0; int N,H,R,T; double y[MAX_N+5]; 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; } } void solve() { 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?' ':' '); } int main() { int c; cin>>c; while(c--) { cin>>N>>H>>R>>T; solve(); } return 0; }