列表

详情


NC207579. SumoandBalloon

描述

Sumo 喜欢吹气球,更喜欢吹炸气球。

今天,他准备了一面粘满密密麻麻钉子的墙(尖锐面朝着 Sumo),站在离墙一定距离的地方朝着垂直于墙面的方向吹气球。他想知道,从他往气球里吹起开始计时,气球会在什么时间点爆炸。

为了方便计算,我们对问题进行简化:

特别的:

输入描述

第一行包含一个整数 ,表示 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)

上一题