意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

noip2002 自由落体 (物理)

来源:恒创科技 编辑:恒创科技编辑部
2024-02-04 09:37:59


P1125自由落体

​​Accepted​​


noip2002 自由落体 (物理)


标签: ​​模拟​​​ ​​​NOIP提高组2002​​









描述



在高为 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)



输出格式



小车能接受到的小球个数。



样例1



样例输入1[复制]

5.0 9.0 5.0 2.5 1.8 5

样例输出1[复制]

1



限制



每个测试点1s



提示



原题中是附带有图解的,小车位于原点的右侧(数轴的正半轴),小车的左端与原点距离为S1,小车以速度V向原点行驶。



来源



noip2002提高组第三题


解析:所有的球是同时下落的,基本思路就是求出小球所能接到球的一个范围[x,y],

[x,y]∩{z|z>=0,z<=n-1,z是整数}即为本题的解。

设z=0.00001,

求取左界x:x1=s-sqrt(h/5)*v ,表示小球落地时的小车前端所处位置,x=x1-z;

求取右界y:k+sqrt(z)表示小球下落过程中恰好被小车前端左上点接住的最高高度,并且在这个位置时,小车的右端是处于离远点最远的地方。

y1=s+l-sqrt((h-k-sqrt(z))/5),表示此时小车右端所处的位置,y=y1+z;

代码:


#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;

const double precision=1e-6;

int main()
{
freopen("1.in","r",stdin);
double h,s,v,l,k,x,y,z=1e-5;
int n,p,q;
scanf("%lf%lf%lf%lf%lf%d",&h,&s,&v,&l,&k,&n);

x=s-sqrt(h/5)*v-z,p=(int)x;
if(x-p>precision)p++;

y=h-k-sqrt(z),y=max(0.0,y);
y=s+l-sqrt(y/5)*v+z,q=(int)y;
p=max(0,p),q=min(n-1,q);
printf("%d\n",max(0,q-p+1));
return 0;
}



上一篇: hdu3944 DP? (lucas定理+预处理) 下一篇: 手机怎么远程登录云服务器?