题意大致是求凸包边上的点的个数以及凸包里面的点的个数,还有凸包的面积
解题思路: 面积=内部点数+边上点数/2-1
边上的点数等于这条边的x差值和y差值的最大公约数+1
#include<cstdio>
#include<iostream>
using namespace std;
//求a,b的最大公约数
int gcd(int a,int b)
{
if(a<0)a=-a;
if(b<0)b=-b;
int c;
while(b)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
// freopen("test.txt","r",stdin);
int n,t;
int x1,y1,x2,y2;
int sum,ans,cs=0;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ans=sum=x1=y1=0;
while(n--)
{
scanf("%d%d",&x2,&y2);
sum+=gcd(x2,y2);
x2+=x1;
y2+=y1;
ans+=x1*y2-y1*x2;
x1=x2,y1=y2;
}
if(ans<0)ans=-ans;
printf("Scenario #%d:\n%d %d %.1lf\n",++cs,ans/2+1-sum/2,sum,ans/2.0);
if(t)
printf("\n");
}
return 0;
}