您的位置:首页 > 其它

POJ 1265 Area (简单多边形求面积+pick公式)

2012-08-16 00:19 375 查看
pick定理:面积=内部点数+边上点数/2 -1;

开始做的时候脑袋发昏,敲了一个小时的模版,枚举点判断与多边形位置,果断TLE

等脑子清醒了,多画了几个图,数了几次点,就A了。。

//Memory: 180K
//Time: 0MS
#include <stdio.h>
#include <math.h>
struct POINT
{
int x,y;
};POINT p[110];
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
double area_of_polygon(int n)//多边形面积
{
int i;
double s;
// if(n<3)
// return 0;
s=p[0].y*(p[n-1].x-p[1].x);
for(i=1;i<n;i++)
s+=p[i].y*(p[i-1].x-p[(i+1)%n].x);
return s/2;
}
int main()
{
int cas,i,j,n;
scanf("%d",&cas);
for(int f=1;f<=cas;f++)
{
scanf("%d",&n);
p[0].x=0;
p[0].y=0;
int dx,dy,on=0,in=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&dx,&dy);
p[i].x=p[i-1].x+dx;
p[i].y=p[i-1].y+dy;
if(dx==0 || dy==0)
on+=abs(dx+dy);
else
on+=gcd(abs(dx),abs(dy));
}
double area=area_of_polygon(n);
in=area+1-on*1.0/2;
printf("Scenario #%d:\n",f);
printf("%d %d %.1lf\n\n",in,on,area);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ini