我的心愿是世界和平!
公式:2s=2a+b-2。
皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。
应用:第一行输入测试组数o,接下来每组第一行输入移动步数m,接下来的m行输入两点a,b,分别代表在x,y轴的移动距离。
#include<stdio.h>
int gcd(int x,int y)
{
if(y==0)
return x;
return gcd(y,x%y);
}
int bianjiedian(int a,int b)
{
a=a>0?a:-a;
b=b>0?b:-b;
return gcd(a,b);
}
int mianji(int x,int y,int a,int b)
{
return x*b-a*y;
}
int main()
{
int i,o,t,m,a,b,x,y,aa,bb,s;
scanf("%d",&o);
t=0;
while(o--)
{
s=0;
bb=0;
x=0;
y=0;
scanf("%d",&m);
for(i=0; i<m; i++)
{
scanf("%d%d",&a,&b);
bb+=bianjiedian(a,b);//计算在边界上的点.
a+=x;
b+=y;
s+=mianji(x,y,a,b);//计算切割成小三角形的面积.
x=a;
y=b;
}
s=s>0?s:-s;
aa=(s+2-bb)/2;//利用Pick定理求在多边形内部的点.
double ss;
ss=1.0*s/2.0;
printf("Scenario #%d:\n%d %d %.1lf\n\n",++t,aa,bb,ss);
}
return 0;
}
题目来源 :http://acm.sdibt.edu.cn:8080/vjudge/contest/view.action?cid=1813#problem/I