寻找三角形
来源:互联网 发布:淘宝硅胶充气娃娃 编辑:程序博客网 时间:2024/05/22 00:50
百度笔试
1、问题描述:
三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用R、G、B表示。
现在要找出三个点,并组成一个三角形,使得三角形的面积最大。三角形必须满足:三个点颜色要么全部相同,要么全部不同。
输入描述:
首先输入一个正整数N(N<50)三维坐标系内的点的个数。接下来N行,每一行输入 c x y z,c为R、G、B其中一个。x,y,z,为坐标。(坐标0-999的整数)
输出描述:
最大的三角形面积,保留5位小数。
样例输入:
5R 0 0 0 R 0 4 0 R 0 0 3 G 92 14 7G 12 16 8
样例输出:
6.00000
2、分析
暴力枚举,判断满足条件的三角形,然后计算机三角形面积进行比较。三角形的公式可以使用叉积公式或海伦公式。
本题因为是空间的点,使用叉积公式,即使用向量乘积计算比海伦公式方便很多。
海伦公式:S=√[p(p-a)(p-b)(p-c)]其中p=(a+b+c)/2。
叉积公式:a = a1i + a2j + a3k = [a1, a2, a3]
b = b1i + b2j + b3k = [b1, b2, b3]
s=|a × b| /2= √(a2b3 − a3b2)^2+(a3b1 − a1b3)^2+(a1b2 − a2b1)^2 /2向量的叉积为以a、b为边平行四边形的面积,三角形即为一半。
3、步骤
1)输入
2)循环枚举
3)判断条件,成立计算面积
4)比较得出最大面积值
5)按格式输出
4、实现代码
#include <bits/stdc++.h>using namespace std;#define mul(x) ((x)*(x))char type[55];double x[55],y[55],z[55];int main(){int n;cin>>n;for(int i=0;i<n;i++)cin>>type[i]>>x[i]>>y[i]>>z[i];double ans=0.0;for(int i=0;i<n;i++){for(int j=0;j<i;j++){for(int k;k<j;k++){//循环枚举int ok=0;if(type[i]==type[j] || type[i]==type[k]) ok=1;//颜色相同if(type[i]!=type[j] && type[i]!=type[k] && type[j]!=type[k]) ok =1;//颜色都不相同if(!ok) continue;//不符合跳过double ux=x[j]-x[i],uy=y[j]-y[i],uz=z[j]-z[i];//两个向量double vx=x[k]-x[i],vy=y[k]-y[i],vz=z[k]-z[i];double area=sqrt(mul(ux*vy-vx*uy)+mul(uy*vz-vy*uz)+mul(uz*vx-ux*vz));ans=ans>area*0.5?ans:area*0.5;//值比较}}}printf("%.5lf\n",ans);return 0;}
阅读全文
1 0
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 寻找三角形
- 牛客网 寻找三角形
- 百度笔试-寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- 寻找三角形-百度-最大值
- 百度:寻找三角形
- 【算法题】寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- [编程题] 寻找三角形
- 寻找三角形(编程题)
- 【百度春招】寻找三角形
- 关于c++异常的初接触try{}catch{}
- 【Redis】——概览
- webpack 单独打包指定JS文件
- 239. Sliding Window Maximum
- LintCode余弦相似度
- 寻找三角形
- 错误:仅当显式请求注释处理时才接受类名称
- CodeForces
- 【安卓小笔记】开发过程的小功能实现
- 每日练习2017-11-06
- OkHttp的同步请求和异步请求
- UI简易框架的学习笔记
- JZOJ5459. 【NOIP2017提高A组冲刺11.7】密室
- 实验楼sql进阶之简化数据操作提升性能(window)