寻找三角形

来源:互联网 发布:希拉里 放过, 知乎 编辑:程序博客网 时间:2024/05/16 08:36
#include<bits/stdc++.h>using namespace std;struct P{  int x;  int y;  int z;}r[55],g[55],b[55];double L(P a,P b)    {    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));}double S(P a,P b,P c)    {    double d1=L(a,b);    double d2=L(a,c);    double d3=L(b,c);    double l=(d1+d2+d3)/2;    double s=sqrt(l*(l-d1)*(l-d2)*(l-d3));    return s;}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].x=x;                r[rn].y=y;                r[rn].z=z;                rn++;            }            else if(c=='G'){                g[gn].x=x;                g[gn].y=y;                g[gn].z=z;                gn++;            }            else if(c=='B'){                b[bn].x=x;                b[bn].y=y;                b[bn].z=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 s=S(r[i1],r[i2],r[i3]);                        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 s=S(g[i1],g[i2],g[i3]);                        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 s=S(b[i1],b[i2],b[i3]);                        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 s=S(r[i1],g[i2],b[i3]);                        if(s>max)max=s;                    }        printf("%.5f\n",max);         }    return 0;}#include<iostream>#include<cmath>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; cout<<d1<<" "<<d2<<" "<<d3;cout<<l                    }        }        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;}

原创粉丝点击