题意:给你一个圆锥,然后给你一个点(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;
}