Uva 10112 Myacm Triangles

来源:互联网 发布:淘宝超级搜索 编辑:程序博客网 时间:2024/06/05 17:23
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1053
题意:给一堆点,求这些点构成的面积最大且不包含其他点的三角形。
题解:数据量15,直接O(n4)枚举。
代码:
#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#include<string>using namespace std;struct Point{    double x,y;    char s;    Point(double x=0,double y=0,char s='\0'):x(x),y(y),s(s) {} //构造函数};typedef Point Vector;Vector operator + (Vector A,Vector B){    return Vector(A.x+B.x,A.y+B.y);}Vector operator - (Point A,Point B){    return Vector(A.x-B.x,A.y-B.y);}double Cross(Vector A,Vector B){    return A.x*B.y-A.y*B.;}//利用叉积求三角形面积double Area2(Point A,Point B,Point C){    return fabs(Cross(B-A,C-A))/2;}bool judge(Point A,Point B,Point C,Point p){    bool flag1=Cross(p-A,B-A)<=0&&Cross(p-B,C-B)<=0&&Cross(p-C,A-C)<=0;    bool flag2=Cross(p-A,B-A)>=0&&Cross(p-B,C-B)>=0&&Cross(p-C,A-C)>=0;    return flag1||flag2;}int main(){    int n;    while(cin>>n&&n)    {        Point P[n];        for(int i=0; i<n; i++)        {            getchar();            scanf("%c %lf %lf",&P[i].s,&P[i].x,&P[i].y);        }        double area=0;        char posi,posj,posk;        for(int i=0; i<n; i++)            for(int j=i+1; j<n; j++)                for(int k=j+1; k<n; k++)                {                    int flag=1;                    for(int p=0; p<n; p++)                    {                        if(p==i||p==j||p==k) continue;                        if(judge(P[i],P[j],P[k],P[p]))                        {                            flag=0;                            break;                        }                    }                    if(flag&&area<Area2(P[i],P[j],P[k]))                    {                        area=Area2(P[i],P[j],P[k]);                        posi=P[i].s;                        posj=P[j].s;                        posk=P[k].s;                    }                }        string s;        s+=posi;        s+=posj;        s+=posk;        sort(s.begin(),s.end());        cout<<s<<endl;    }    return 0;}


原创粉丝点击