题目
给定顶点坐标均是整点(或正方形格点)的简单多边形,皮克定理说明了其面积S和内部格点数目n、边上格点数目s的关系:
#include<iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e6+7;
const int maxp=1e6+7;
const double inf=1e200;
const double eps=1e-8;
const double pi =acos(-1.0);
int sgn(double x){
if(fabs(x)<eps)return 0;
return x>0?1:-1;
}
long long gcd(long long x,long long y){
if(!y)return x;
long long mod=x%y;
while(mod)x=y,y=mod,mod=x%y;
return y;
}
int main(){
int t;scanf("%d",&t);
for(int ac=1;ac<=t;++ac){
long long I,E=0;
double A=0;
long long sx=0,sy=0,ex,ey,dx,dy;
int n;scanf("%d",&n);
for(int i=0;i<n;++i){
scanf("%lld%lld",&dx,&dy);
ex=sx+dx,ey=sy+dy,A+=ey*sx-ex*sy,sx=ex,sy=ey;
if(dx<0)dx=-dx;
if(dy<0)dy=-dy;
if(!dx)E+=dy;
else if(!dy)E+=dx;
else E+=gcd(dx,dy);
}
if(A<0)A=-A;
A/=2.0;
I=A-E/2+1;
printf("Scenario #%d:\n",ac);
printf("%lld %lld %.1lf\n\n",I,E,A);
}
return 0;
}