[Pick定理]
pick定理: 设F为平面上以格子点为定点的单纯多边形,则其面积为:S=b/2+i-1。 b为多边形边上点格点的个数,i为多边形内部格点的个数。 可用其计算多边形的面积,边界格点数或内部格点数。
题目大意:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int m,t,I,E;
double area;
struct Point
{
int x,y;
}P[105];
int Gcd(int a,int b)
{
return b?Gcd(b,a%b):a;
}
int corss(int x,int y,int x1,int y1)
{
return x1*y-x*y1;
}
int dx,dy;
int main()
{
int i,j,k;
scanf("%d",&t);
k=1;
while(t--)
{
scanf("%d",&m);
P[0].x=P[0].y=0;
area=0;E=0;
for(i=1;i<=m;i++)
{
scanf("%d%d",&dx,&dy);
P[i].x=dx+P[i-1].x;
P[i].y=dy+P[i-1].y;
E+=Gcd(abs(dx),abs(dy));
area+=corss(P[i].x,P[i].y,P[i-1].x,P[i-1].y);//面积的二倍
}
// area=b/2+i-1;2*area=b+2*i-2
I=(area+2-E)/2;
printf("Scenario #%d:\n%d %d %.1lf\n\n",k++,I,E,area/2.0);
}
return 0;
}