http://poj.org/problem?id=1265
#include<cstdio>
#include<istream>
#include<algorithm>
#include<cmath>
int n;
using namespace std;
const int maxn=;
const double pi=acos(-1.0);
int gcd(int a,int b)
{
return b==?a:gcd(b,a%b);
}
struct Point //点的定义
{
double x,y;
Point() {}
Point (double a,double b):x(a),y(b) {}
};
Point a[maxn],b[maxn];
double del(const Point &a,const Point &b)
{
return(a.x*b.y-a.y*b.x);
}
int main()
{
int t,c=; scanf("%d",&t);
while(t--)
{
c++;
scanf("%d",&n);
int xx=,yy=,x,y,num=;
for(int i=; i<n; i++){
scanf("%d%d",&x,&y);
num+=gcd(abs(x),abs(y));
b[i+].x=xx+x;
b[i+].y=yy+y;
xx=b[i+].x;
yy=b[i+].y;
}
double sum=;
b[].x=;
b[].y=;
for(int i=; i<n; i++)
sum+=del(b[i],b[i+]);
printf("Scenario #%d:\n",c);
printf("%d %d %.1lf\n",int(sum/2.0)+-(num/),num,sum/);
printf("\n");
}
}