[编程题] 寻找三角形

来源:互联网 发布:linux gtk编程 编辑:程序博客网 时间:2024/05/29 14:28

三维空间中有N个点,每个点可能是三种颜色的其中之一,三种颜色分别是红绿蓝,分别用’R’, ‘G’, ‘B’表示。
现在要找出三个点,并组成一个三角形,使得这个三角形的面积最大。
但是三角形必须满足:三个点的颜色要么全部相同,要么全部不同。
输入描述:
首先输入一个正整数N三维坐标系内的点的个数.(N <= 50)

接下来N行,每一行输入 c x y z,c为’R’, ‘G’, ‘B’ 的其中一个。x,y,z是该点的坐标。(坐标均是0到999之间的整数)

输出描述:
输出一个数表示最大的三角形面积,保留5位小数。

输入例子1:
5
R 0 0 0
R 0 4 0
R 0 0 3
G 92 14 7
G 12 16 8

输出例子1:
6.00000

#include <bits/stdc++.h>using namespace std;struct noode{    char coolor;    int x,y,z;};double dis (noode a,noode b){    return sqrt(1.0*(a.x-b.x)*(a.x-b.x)+1.0*(a.y-b.y)*(a.y-b.y)+1.0*(a.z-b.z)*(a.z-b.z));}int main(){    int n;    double mmax=-1e9;    cin>>n;    noode ai[100];    for(int i=0;i<n;i++)    {        cin>>ai[i].coolor>>ai[i].x>>ai[i].y>>ai[i].z;    }    for(int i=0;i<n;i++)    {        for(int j=0;j<n;j++ )        {            //if(i==j) continue;            for(int k=0;k<n;k++)            {                //if(k==i||k==j) continue;                if((ai[i].coolor==ai[j].coolor&&ai[j].coolor==ai[k].coolor)||(ai[i].coolor!=ai[j].coolor&&ai[j].coolor!=ai[k].coolor&&ai[i].coolor!=ai[k].coolor))                {                    double a=dis(ai[i],ai[j]);                    double b=dis(ai[i],ai[k]);                    double c=dis(ai[j],ai[k]);                    double p=(a+b+c)/2;                    double mianji=sqrt(p*(p-a)*(p-b)*(p-c));                    if(mianji>mmax) mmax=mianji;                }            }        }    }    printf("%.5lf\n",mmax);    return 0;}