将物体的重力加速度分解。
一部分用来做弹起运动,一部分用来做匀加速直线运动。
可以计算得出两个方向上的运动周期,两者之商为答案。
#include
#include
#include
#include
using namespace std;
typedef long long int LL;
const int N=1e5 + 10;
const int mod=998244353;
const double g=9.8;
const double pi=acos(-1.0);
double t, vx, vy, v;
int T;
double a, b, x, y;
int main()
{
scanf("%d",&T);
while(T–){
scanf("%lf%lf%lf%lf",&a,&b,&x,&y);
t=sqrt(2.0*(y-b/a*(-x))/g);
vx=0; v=vy=g*t;
int ans=0;
double da=atan(b/a), db=pi/2-da;
vx=v * cos(fabs(db-da));
vy=v * sin(fabs(db-da));
double temp=-x;
while(temp > 0){
ans ++;
if(db >=da) t=vy*2/g;
else t=0;
double B=2*(vy-bvx/a), C=2bvxt/a;
double tt=(-B + sqrt(BB + 4g*C))/2/g;
t=t + tt;
vy=vy + g*tt;
temp -=vx * t;
if(vx==0) db=pi/2;
else db=atan(vy/vx) - da;
v=sqrt(vxvx + vyvy);
vx=v * cos(fabs(db-da));
vy=v * sin(fabs(db-da));
}
printf("%d
", ans);
}
return 0;
}
2021Multi-UniversityTrainingContest6LPinball受力分析