[NOIP提高组2002]自由落体

题目描述:
在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1。在地面上有一个小车(长为 L,高为 K,距原点距离为 S1)。已知小球下落距离计算公式为 d=1/2*g*(t^2),其中 g=10,t 为下落时间。地面上的小车以速度 V 前进。

小车与所有小球同时开始运动,当小球距小车的距离 <= 0.00001 时,即认为小球被小车接受(小球落到地面后不能被接受)。
请你计算出小车能接受到多少个小球。
[NOIP提高组2002]自由落体_第1张图片
输入:
H,S1,V,L,K,n (l<=H,S1,V,L,K,n <=100000)
输出:
小车能接受到的小球个数。

题解:
这题纯计算,太恶心了。考精度吧。
实在是恶心。因为所有球同时落地,所以直接算。
详见代码。

#include
#include
#include
#include
#include
#define eps 1e-5
#define rps 1e-6
using namespace std;
double H,S1,V,L,K;
int n;
int main()
{
    scanf("%lf%lf%lf%lf%lf%d",&H,&S1,&V,&L,&K,&n);
    double yu=S1-sqrt(H/5.0)*V-eps;int p=(int)yu;
    if(yu-p>rps) p++;
    double y=H-K-sqrt(eps);y=max(0.0,y);
    y=S1+L-sqrt(y/5.0)*V+eps;int q=(int)y;
    p=max(p,0);q=min(n-1,q);
    printf("%d",max(0,q-p+1));
}

你可能感兴趣的:(历年noip)