POJ 3684 Physics Experiment

链接: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?'\n':' ');
}
int main()
{
    int c;
    cin>>c;
    while(c--)
    {
        cin>>N>>H>>R>>T;
        solve();
    }


    return 0;
}


你可能感兴趣的:(exp)