正题
题目大意
求一个多边形面积。
解题思路
随便定一个原点,然后答案就是相邻点的差积之和的绝对值。
要判断不能组成多边形的情况。
codecodecode
#include<cstdio>
#include<algorithm>
#include<cmath>
#define N 1010
#define db double
using namespace std;
db zx,zy,r,x[N],y[N];
int n,cnt,ans;
struct node{db x,y;
}p[N];
db cz(node p2,node p3,node p1){return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);
}
db banana(node p1,node p2,node p3,node p4){return (cz(p2,p3,p1)*cz(p2,p4,p1)<0&&cz(p4,p1,p3)*cz(p4,p2,p3)<0);
}
int main()
{scanf("%d",&n);double ans=0,lx,ly;if (n<=2){printf("Impossible");return 0;}for(int i=1;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);for(int i=2;i<=n;i++)for(int j=1;j<n;j++)if((i!=j)&&(i!=j+1)&&banana(p[i-1],p[i],p[j],p[j+1])){printf("Impossible");return 0;}for(int i=3;i<=n;i++)ans+=cz(p[i],p[i-1],p[1])*0.5;printf("%0.2lf",abs(ans));
}