uva 10112 Myacm Triangles

#include<iostream>
#include <cmath>
#include <cstdio>
#include <cstring>

using namespace std;

char threePoint[10010][5];
double area[10010];
int main()
{
    int n;
    while(cin>>n&&n)
    {
        int num_area=0;
        int x[17],y[17];
        char str[17];
        for(int i=0; i<n; i++)
            cin>>str[i]>>x[i]>>y[i];
        for(int i=0; i<n-2; i++)
            for(int j=i+1; j<n-1; j++)
                for(int k=j+1; k<n; k++)
                {
                    double a=0.5*fabs((y[k]-y[i])*(x[j]-x[i])-(y[j]-y[i])*(x[k]-x[i]));//求出三个点的面积
                    int flag=1;
                    double area1,area2,area3;
                    for(int l=0; l<n; l++)//除去上面三个点,剩下的点
                    {
                        if(l!=i&&l!=j&&l!=k)
                        {
                            area1=0.5*fabs((y[k]-y[l])*(x[j]-x[l])-(y[j]-y[l])*(x[k]-x[l]));
                            area2=0.5*fabs((y[k]-y[i])*(x[l]-x[i])-(y[l]-y[i])*(x[k]-x[i]));
                            area3=0.5*fabs((y[l]-y[i])*(x[j]-x[i])-(y[j]-y[i])*(x[l]-x[i]));//和上面个点中任意两个点的面积
                            if(a==(area1+area2+area3))//如果相等说明这个点在上面三个点组成的三角形中
                            {
                                flag=0;//标记是否相同
                                break;
                            }
                        }
                    }
                    if(flag)//如果相同,添加到一个数组中,此数组中全为三角形本身中不含其它点的三角形的面积
                    {
                        area[num_area]=a;
                        threePoint[num_area][0]=str[i];
                        threePoint[num_area][1]=str[j];
                        threePoint[num_area][2]=str[k];
                        threePoint[num_area][3]='\0';
                        num_area++;
                    }
                }
        double max=-1;
        int flag;
        for(int i=0; i<num_area; i++)//找出这个数组中最大的面积
        {
            if(area[i]>max)
            {
                max=area[i];
                flag=i;//标记最大的位置
            }
        }
        cout<<threePoint[flag]<<endl;//输出最大三角形面积对应的三个点
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值