HDU 4709 Herding

来源:互联网 发布:淘宝如何设置两个客服 编辑:程序博客网 时间:2024/05/19 16:20

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4709


题目大意:给出n个点,可以连成组成许多三角形,求最小的三角形面积。注:三角形面积不为0


题目思路:利用叉乘求三角形面积,三个for循环取点


代码:

#include<iostream>#include<cstdio>using namespace std;#define INF 99999999#define N 120typedef struct{    double x,y;}Point;double Judge(double x1,double y1,double x2,double y2){    if((x1*y2-x2*y1)<0) return (x2*y1-x1*y2)/2;    return (x1*y2-x2*y1)/2;}Point p[N];int main(){    int n,ca;    scanf("%d",&ca);    while(ca--){        scanf("%d",&n);        for(int i=0;i<n;i++){            scanf("%lf%lf",&p[i].x,&p[i].y);        }        int ok=0;        double area=INF;        for(int i=0;i<n;i++){            for(int j=i+1;j<n;j++)                for(int k=j+1;k<n;k++){                    double t=Judge(p[k].x-p[i].x, p[k].y-p[i].y, p[j].x-p[i].x, p[j].y-p[i].y);                    if(area>t&&t!=0){                        area=t;                        ok=1;                    }                }        }        if(ok) printf("%.2lf\n",area);        else printf("Impossible\n");    }    return 0;}


0 0
原创粉丝点击