题目链接:http://poj.org/problem?id=3684
Physics Experiment
解题思路:跟蚂蚁那个题比较类似,先单独计算每个点的位置,再排序。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
double h,r,t;
double fun(int t)
{
if(t<=0)
return h;
double tx=sqrt(h/5.0);
int xx=t/tx;
double tt;
if(xx&1)
tt=xx*tx+tx-t;//如果是奇数,应该是tx-(t-xx*tx),即xx*tx+tx-t,根据物理运动公式得来的
else
tt=t-xx*tx;//如果是偶数,多出来的时间按重新开始计算
return h-5.0*tt*tt;//求出距离地面的高度
}
int main()
{
int T;
double ans[110];
scanf("%d",&T);
while(T--)
{
int i,n;
scanf("%d%lf%lf%lf",&n,&h,&r,&t);
for(i=0;i<n;i++)
ans[i]=fun(t-i);//跟蚂蚁那个题比较类似,先单独计算每个点的位置,再排序
sort(ans,ans+n);
for(i=0;i<n-1;i++)
printf("%.2lf ",ans[i]+2*r*i/100.0);
printf("%.2lf\n",ans[n-1]+2*r*i/100.0);
}
return 0;
}