链接:https://ac.nowcoder.com/acm/problem/253077
来源:牛客网
题目描述
小沙被困在两个巨大的墙壁之中快要被压死了,但是两个墙壁中间就是万丈悬崖,小沙会不断的向对面墙壁跳。两个墙壁的初始距离为s。小沙的初始速度是v0(相对于起跳墙壁),初始速度方向为水平,但由于重力的影响,小沙会有一个向下的加速度ggg,因此小沙的运动轨迹是抛物线。已知两个墙壁是以v1的相对速度匀速相向运动。当小沙跳到对面墙壁时,他会立刻重新起跳,初始速度仍然是v0相对于起跳墙壁),方向仍然是水平。请问小沙在被压死的那一刻一共飞了多少米?
我们计算小沙路程时,以小沙第一次起跳的墙壁作为参考系!
注:小沙可以视为质点,即忽略体积。
输入描述:
四个正整数s,v0,v1,g用空格隔开。
1≤s,v0,v1,g≤100
输出描述:
小沙一共飞行的路程长度。如果你的答案和标准答案的误差不超过10^{-4},则认为你的答案正确。
示例1
输入
复制
1 1 1 1
输出
复制
1.35509738
说明
#include<bits/stdc++.h> #include<iostream> using namespace std; double s,v0,v1,g; double f(double x){ return 1./2*x*sqrt(4*x*x+1)+1./4*asinh(2*x); } signed main(){ cin>>s>>v0>>v1>>g; int t=100000; double ans=0; for(int i=1;i<=t;i++){ double t=s/(v0+v1); double v=(i&1)?v0:v0+v1; double a=g/(2.*v*v); ans+=f(t*v*a)/a; s=s/(v0+v1)*v0; } printf("%.10lf\n",ans); return 0; }