hdu4709 herding 計算幾何 三角形面積 列舉
阿新 • • 發佈:2019-02-20
題目給出了n個點,求任意幾個點能圍成的最小圖形的面積。看到題的開始在圖形的形狀上猶豫了一上,忽然想到一定是三角形,因為多邊形必然可繼續切割成三角形。於是轉換成了列舉三點,判斷面積。注意共線情況。
本次用到了運算子過載
#include<cmath> #include<iostream> #include<cstdio> #define MAXN 1005 using namespace std; typedef struct node{ double x, y; }dots; dots coor[MAXN]; double operator *(dots p, dots q){ return (p.x*q.y-q.x*p.y)/2; } dots operator -(dots p, dots q){ dots tmp; tmp.x=p.x-q.x; tmp.y=p.y-q.y; return tmp; } double esp=1e-8; int main(){ int ncase; cin>>ncase; while(ncase--){ int n;cin>>n; for(int i=0;i<n;i++){ scanf("%lf%lf", &coor[i].x, &coor[i].y); } double ans=-1; dots ad, bd; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ for(int k=j+1;k<n;k++){ ad=coor[j]-coor[i];bd=coor[k]-coor[i]; double tmp=fabs(ad*bd); if(tmp-0<=esp)continue; if(ans==-1)ans=tmp; else if(tmp<ans)ans=tmp; } } } if(ans==-1)cout<<"Impossible"<<endl; else printf("%.2lf\n", ans); } return 0; }