寻找三角形(待调试)

来源:互联网 发布:中世纪 食物 知乎 编辑:程序博客网 时间:2024/06/06 05:05
#include<bits/stdc++.h>using namespace std;int r[1000][3];int g[1000][3];int b[1000][3];int main()    {    int n;    while(cin>>n)        {        int rn=0,gn=0,bn=0;        char c;        int x,y,z;        for(int i=0;i<n;i++)            {            cin>>c>>x>>y>>z;            if(c=='R'){                r[rn][0]=x;                r[rn][1]=y;                r[rn][2]=z;                rn++;            }            else if(c=='G'){                g[gn][0]=x;                g[gn][1]=y;                g[gn][2]=z;                gn++;            }            else if(c=='B'){                b[bn][0]=x;                b[bn][1]=y;                b[bn][2]=z;                bn++;            }        }        double max=0;        if(rn>=3)            {            for(int i1=0;i1<rn-2;i1++)                for(int i2=i1+1;i2<rn-1;i2++)                    for(int i3=i2+1;i3<rn;i3++)                        {                        double d1=sqrt((r[i1][0]-r[i2][0])*(r[i1][0]-r[i2][0])+(r[i1][1]-r[i2][1])*(r[i1][1]-r[i2][1])+(r[i1][2]-r[i2][2])*(r[i1][2]-r[i2][2]));                        double d2=sqrt((r[i1][0]-r[i3][0])*(r[i1][0]-r[i3][0])+(r[i1][1]-r[i3][1])*(r[i1][1]-r[i3][1])+(r[i1][2]-r[i3][2])*(r[i1][2]-r[i3][2]));                        double d3=sqrt((r[i3][0]-r[i2][0])*(r[i3][0]-r[i2][0])+(r[i3][1]-r[i2][1])*(r[i3][1]-r[i2][1])+(r[i3][2]-r[i2][2])*(r[i3][2]-r[i2][2]));                        double l=(d1+d2+d3)/2;                        double s=sqrt(l*(l-d1)*(l-d2)*l-d3);                        if(s>max)max=s;                     }        }        if(gn>=3)            {            for(int i1=0;i1<gn-2;i1++)                for(int i2=i1+1;i2<gn-1;i2++)                    for(int i3=i2+1;i3<gn;i3++)                        {                        double d1=sqrt((g[i1][0]-g[i2][0])*(g[i1][0]-g[i2][0])+(g[i1][1]-g[i2][1])*(g[i1][1]-g[i2][1])+(g[i1][2]-g[i2][2])*(g[i1][2]-g[i2][2]));                        double d2=sqrt((g[i1][0]-g[i3][0])*(g[i1][0]-g[i3][0])+(g[i1][1]-g[i3][1])*(g[i1][1]-g[i3][1])+(g[i1][2]-g[i3][2])*(g[i1][2]-g[i3][2]));                        double d3=sqrt((g[i3][0]-g[i2][0])*(g[i3][0]-g[i2][0])+(g[i3][1]-g[i2][1])*(g[i3][1]-g[i2][1])+(g[i3][2]-g[i2][2])*(g[i3][2]-g[i2][2]));                        double l=(d1+d2+d3)/2;                        double s=sqrt(l*(l-d1)*(l-d2)*l-d3);                        if(s>max)max=s;                     }        }        if(bn>=3)            {            for(int i1=0;i1<bn-2;i1++)                for(int i2=i1+1;i2<bn-1;i2++)                    for(int i3=i2+1;i3<bn;i3++)                        {                        double d1=sqrt((b[i1][0]-b[i2][0])*(b[i1][0]-b[i2][0])+(b[i1][1]-b[i2][1])*(b[i1][1]-b[i2][1])+(b[i1][2]-b[i2][2])*(b[i1][2]-b[i2][2]));                        double d2=sqrt((b[i1][0]-b[i3][0])*(b[i1][0]-b[i3][0])+(b[i1][1]-b[i3][1])*(b[i1][1]-b[i3][1])+(b[i1][2]-b[i3][2])*(b[i1][2]-b[i3][2]));                        double d3=sqrt((b[i3][0]-b[i2][0])*(b[i3][0]-b[i2][0])+(b[i3][1]-b[i2][1])*(b[i3][1]-b[i2][1])+(b[i3][2]-b[i2][2])*(b[i3][2]-b[i2][2]));                        double l=(d1+d2+d3)/2;                        double s=sqrt(l*(l-d1)*(l-d2)*l-d3);                        if(s>max)max=s;                     }        }             for(int i1=0;i1<rn;i1++)                for(int i2=0;i2<gn;i2++)                    for(int i3=0;i3<bn;i3++)                        {                        double d1=sqrt((r[i1][0]-g[i2][0])*(r[i1][0]-g[i2][0])+(r[i1][1]-g[i2][1])*(r[i1][1]-g[i2][1])+(r[i1][2]-g[i2][2])*(r[i1][2]-g[i2][2]));                        double d2=sqrt((r[i1][0]-b[i3][0])*(r[i1][0]-b[i3][0])+(r[i1][1]-b[i3][1])*(r[i1][1]-b[i3][1])+(r[i1][2]-b[i3][2])*(r[i1][2]-b[i3][2]));                        double d3=sqrt((b[i3][0]-g[i2][0])*(b[i3][0]-g[i2][0])+(b[i3][1]-g[i2][1])*(b[i3][1]-g[i2][1])+(b[i3][2]-g[i2][2])*(b[i3][2]-g[i2][2]));                        double l=(d1+d2+d3)/2;                        double s=sqrt(l*(l-d1)*(l-d2)*l-d3);                        if(s>max)max=s;                     }        cout<<max<<endl;                }        return 0;}