蓝桥杯练习系统(算法训练)ALGO-953 混合积

资源限制

内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

问题描述

  众所周知,人人都在学习线性代数,既然都学过,那么解决本题应该很方便。

  宇宙大战中,qdc在其中建立了许多空间站,这些空间站散落在三维空间中,并且由于宇宙之大,空间站完全可以抽象为一个质点。为了达到毁灭性攻击,qdc可以选择其中4个空间站,然后炸毁其形成的平行六面体空间(如图)。既然是毁灭性的打击,六面体自然要有大的体积,即使他会炸毁自己的空间站。胜利掌握在你的手中,你来编写一个程序输出这个最大的体积。

输入格式

  第一行输入一个数,表示空间站数目。

  接下来每行三个数,表示这些空间站的三维坐标。

输出格式

  一个数字如题所述。

样例输入

4

0 0 0

0 0 1

0 1 0

2 0 0

样例输出

2

数据规模和约定

  对于30%的数据n<=5

  对于100%的数据4<=n<=10

  |xi|,|yi|,|zi|<=512

cpp 复制代码
#include<iostream>
#include<math.h>
using namespace std;
typedef struct Point{
	int x;
	int y;
	int z;
}Point;
Point point[11];
int ans=0;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>point[i].x>>point[i].y>>point[i].z;
	} 
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			for(int k=j+1;k<=n;k++){
				for(int l=k+1;l<=n;l++){
					//求出向量a,b,c,利用混合积:a叉乘b点乘c 
					int ax=point[j].x-point[i].x;
					int ay=point[j].y-point[i].y;
					int az=point[j].z-point[i].z;
					
					int bx=point[k].x-point[i].x;
					int by=point[k].y-point[i].y;
					int bz=point[k].z-point[i].z;
					
					int cx=point[l].x-point[i].x;
					int cy=point[l].y-point[i].y;
					int cz=point[l].z-point[i].z;
					
					int res=abs(ax*by*cz+ay*bz*cx+az*bx*cy-az*by*cx-bz*cy*ax-cz*ay*bx);
					ans=max(res,ans);
					
				}
			}
		}
	}
	cout<<ans<<endl;
	return 0;
} 

思路:四个点可以确定一个六面体的体积,因此在n个点中挑4个点即可,和顺序无关。利用4层for循环来选择4个点,使用混合积求体积。

相关推荐
To_OC11 分钟前
LC 3 无重复字符的最长子串:从入门滑动窗口到优化写法,再也不怕面试官追问
javascript·算法·leetcode
(Charon)29 分钟前
【C++】多线程死锁:产生原因、复现与解决方法
开发语言·c++·算法
lucas_AI1 小时前
ConfBench:大模型的「我很有把握」,到底能不能信?
人工智能·算法
oier_Asad.Chen1 小时前
【洛谷题解/AcWing题解/真题】洛谷P2330【SCOI2005】繁忙的都市(Kruskal算法的再探究))
c++·算法·贪心算法·图论·最小生成树·kruskal
青 春 记 忆4 小时前
LeetCode 53. 最大子数组和|Python 解法详解
python·算法·leetcode
豆瓣鸡4 小时前
算法日记 - Day10
算法
戴西软件4 小时前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化
zander2584 小时前
4. 寻找两个正序数组的中位数:用分割点代替合并
数据结构·算法
Kisorge5 小时前
【电机控制器】 基于STSPIN32G4的FOC控制
stm32·嵌入式硬件·算法
Elivs5 小时前
RMSNorm函数
人工智能·算法·机器学习