[NOIP提高组2002]自由落体

来源:互联网 发布:安全网络龙头股 编辑:程序博客网 时间:2024/05/19 03:19

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

小车与所有小球同时开始运动,当小球距小车的距离 <= 0.00001 时,即认为小球被小车接受(小球落到地面后不能被接受)。
请你计算出小车能接受到多少个小球。
这里写图片描述
输入:
H,S1,V,L,K,n (l<=H,S1,V,L,K,n <=100000)
输出:
小车能接受到的小球个数。

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

#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#define eps 1e-5#define rps 1e-6using 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));}
原创粉丝点击