
题意:给你一个圆锥,然后给你一个点(x,y,z),和运动速度(vx,vy,vz),问能够到达曲面的上所用的最小时间。
思路:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int Max_n=1e5+10;
int main(){
int T;
scanf("%d",&T);
for(int cnt=1;cnt<=T;cnt++){
double r,h;
scanf("%lf%lf",&r,&h);
double x,y,z;
scanf("%lf%lf%lf",&x,&y,&z);
double vx,vy,vz;
scanf("%lf%lf%lf",&vx,&vy,&vz);
double c=r*r/(h*h);
double k=h-z;
double a=vx*vx+vy*vy-c*vz*vz;
double b=2*(x*vx+y*vy+c*k*vz);
double c1=x*x+y*y-c*k*k;
double ans=(-b-sqrt(b*b-4*a*c1))/(2*a);
printf("Case %d: %.10lf\n",cnt,ans);
}
return 0;
}
本文介绍了一道关于计算从指定点出发以特定速度达到圆锥表面所需的最短时间的编程题。通过数学公式求解二次方程,实现快速准确地计算。
500

被折叠的 条评论
为什么被折叠?



