學(xué)習(xí)了pick定理
給定頂點(diǎn)座標(biāo)均是整點(diǎn)(或正方形格點(diǎn))的簡(jiǎn)單多邊形,皮克定理說(shuō)明了其面積A和內(nèi)部格點(diǎn)數(shù)目i、邊上格點(diǎn)數(shù)目b的關(guān)系:A = i + b/2 - 1。
#include<iostream>
#include<math.h>
using namespace std;

#define MAXN 500


struct point
{int x,y;};
point p[MAXN];
int gcd(int a,int b)


{
if(b==0) return a;
else return gcd(b,a%b);
}
//計(jì)算多邊形面積,頂點(diǎn)按順時(shí)針或逆時(shí)針給出

double area_polygon(int n,point* p)
{
double s1=0,s2=0;
int i;
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;
}

int main()


{
int tc,m,I,E,dx,dy,i,j,k;
scanf("%d",&tc);
for(k=1;k<=tc;k++)

{
scanf("%d",&m);
p[0].x=0;
p[0].y=0;
E=0;
for(i=1;i<=m;i++)

{
scanf("%d%d",&dx,&dy);
p[i].x=p[i-1].x+dx;
p[i].y=p[i-1].y+dy;
E+=gcd(abs(dx),abs(dy));
}
double area=area_polygon(m+1,p);
I=(2*area+2-E)/2;
printf("Scenario #%d:\n%d %d %.1lf\n\n",k,I,E,area);
}
return 0;
}

posted on 2009-10-06 17:58
wyiu 閱讀(242)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
POJ