蓝桥杯练习系统(算法训练)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个点,使用混合积求体积。

相关推荐
带多刺的玫瑰1 小时前
Leecode#9刷题之回文数
数据结构·算法
泯泷1 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
泯泷1 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法
泯泷1 小时前
手搓JSVM第 6 篇:把 IR 编成字节码:emit 与 label fixup
前端·javascript·算法
泯泷1 小时前
手搓JSVM第 3 篇:从栈式 VM 到寄存器式 VM:为什么我们选择寄存器
前端·javascript·算法
泯泷1 小时前
第 4 篇:让 VM 支持变量:Slot、Environment 与 TDZ
前端·javascript·算法
Asize2 小时前
54. 螺旋矩阵
算法
Asize2 小时前
73. 矩阵置零
算法
微露清风3 小时前
快慢指针算法学习记录
学习·算法·快慢指针
benchmark_cc3 小时前
1000只ETF的5分钟K线如何批量获取?QuantDash分页策略与高性能Python实践
开发语言·人工智能·爬虫·python·算法·quantdash·量化数据源