-
//zoj1010 Area
-
//Accepted 1010 C ++ 00:00.09 412K
-
#include <stdio.h>
-
#include <math.h>
-
#define MAXN 1000
-
struct point{ double x,y; } p[MAXN];
-
int n;
-
double xmult(double x1,double y1,double x2,double y2){return x1*y2-x2*y1;}
-
double xmult3(double x1,double y1,double x2,double y2,double x3,double y3){
-
return (x1-x3)*(y2-y3)-(x2-x3)*(y1-y3);
-
}
-
//判点p1、p2在线段p3p4同侧
-
bool same_side(point p1,point p2,point p3,point p4)
-
{
-
double dx,dy,dx1,dy1,dx2,dy2;
-
dx = p4.x-p3.x, dy = p4.y-p3.y;
-
dx1 = p1.x-p3.x, dy1 = p1.y-p3.y;
-
dx2 = p2.x-p4.x, dy2 = p2.y-p4.y;
-
return xmult(dx,dy,dx1,dy1)*xmult(dx,dy,dx2,dy2)>0.0;
-
}
-
//判p1p2与p3p4相交
-
bool intersect(point p1,point p2,point p3,point p4)
-
{
-
return (!same_side(p1,p2,p3,p4) && !same_side(p3,p4,p1,p2));
-
}
-
-
double area_polygon()
-
{
-
int i;
-
double s1=0,s2=0;
-
for (i=0; i<n; ++i){
-
s1 += p[(i+1)%n].y*p[i].x;
-
s2 += p[(i+1)%n].y*p[(i+2)%n].x;
-
}
-
return fabs(s1-s2)/2;
-
}
-
-
void solve()
-
{
-
int i,j,k;
-
for (i=0; i<n; ++i)
-
scanf ("%lf %lf",&p[i].x,&p[i].y);
-
if (n<3){
-
printf ("Impossible/n");
-
return ;
-
}
-
for (i=0; i<n; ++i)
-
for (j=(i+1)/n; j<i-1; ++j){
-
k = (i+1)%n;
-
if (intersect(p[i],p[k],p[j],p[j+1])){
-
printf ("Impossible/n");
-
return ;
-
}
-
}
-
printf ("%.2lf/n",area_polygon());
-
}
-
-
int main()
-
{
-
#ifdef ONLINE_JUDGE
-
#else
-
freopen("1010.txt","r",stdin);
-
#endif
-
int t=0;
-
while (scanf ("%d",&n) != EOF && n){
-
if (t) printf ("/n");
-
printf ("Figure %d: ",++t);
-
solve();
-
}
-
#ifdef ONLINE_JUDGE
-
#else
-
fclose(stdin);
-
#endif
-
return 0;
-
}
zoj1010 Area
最新推荐文章于 2019-03-27 11:36:05 发布