NC207579. SumoandBalloon
描述
输入描述
第一行包含一个整数,表示 Sumo 每秒钟能匀速向气球中吹入 L 单位体积的气体。
第二行包含三个整数,表示 Sumo 嘴巴所在的位置。
接下来包含三行,每行包含三个整数,表示墙面上的三个点,保证三个点不共线。
输出描述
输出仅包含一个实数,表示从 Sumo 往气球里吹起开始计时,第几秒气球发生爆炸。(结果与正确答案相差在以内都算正确)
示例1
输入:
10 0 10 0 0 0 0 0 0 10 10 0 0
输出:
52.3598775598
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 500K, 提交时间: 2020-06-06 17:22:43
#include <bits/stdc++.h> typedef long double ldouble; using namespace std; int main() { double L=0; cin>>L; double X,Y,Z; cin>>X>>Y>>Z; double x1,y1,z1,x2,y2,z2,x3,y3,z3; cin >>x1>>y1>>z1 >>x2>>y2>>z2 >>x3>>y3>>z3 ; double a,b,c; a=(y1-y2)*(z1-z3)-(y1-y3)*(z1-z2); b=(x1-x3)*(z1-z2)-(x1-x2)*(z1-z3); c=(x1-x2)*(y1-y3)-(x1-x3)*(y1-y2); double d=-( a*x1+b*y1+c*z1 ); double PI=acos(-1.0); double D=abs(a*X+b*Y+c*Z+d)/sqrt(a*a+b*b+c*c); double t=D*D*D*PI/6/L; printf("%f\n",t); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 620K, 提交时间: 2020-06-17 15:06:51
#include<bits/stdc++.h> using namespace std; int main() { int i; double a,b,c,d,r,a1,a2,a3,b1,b2,b3,X,Y,Z,L,x[3],y[3],z[3]; scanf("%lf%lf%lf%lf",&L,&X,&Y,&Z); for(i=0;i<3;i++)scanf("%lf%lf%lf",&x[i],&y[i],&z[i]); a1=x[1]-x[0],a2=y[1]-y[0],a3=z[1]-z[0]; b1=x[2]-x[0],b2=y[2]-y[0],b3=z[2]-z[0]; a=a2*b3-a3*b2,b=a3*b1-a1*b3,c=a1*b2-a2*b1,d=-(a*x[0]+b*y[0]+c*z[0]); r=abs(a*X+b*Y+c*Z+d)/2/sqrt(a*a+b*b+c*c); printf("%.10lf\n",r*r*r/3*4*acos(-1.0)/L); }
Python3(3.5.2) 解法, 执行用时: 33ms, 内存消耗: 3560K, 提交时间: 2020-06-06 22:49:55
import math L=int(input()) x,y,z=map(int,input().split()) x1,y1,z1=map(int,input().split()) x2,y2,z2=map(int,input().split()) x3,y3,z3=map(int,input().split()) a1=x2-x1;a2=y2-y1;a3=z2-z1 b1=x3-x1;b2=y3-y1;b3=z3-z1 a=a2*b3-a3*b2 b=a3*b1-a1*b3 c=a1*b2-a2*b1 d=-(a*x1+b*y1+c*z1) R=(abs(a*x+b*y+c*z+d)/2)/math.sqrt(a*a+b*b+c*c) t=4/3*R*R*R*math.pi/L print(t)