链接:http://acm.hdu.edu.cn/showproblem.php?pid=6559 来源:hdu
题意:给你一个圆锥,然后给你一个点(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;
}