http://acm.hdu.edu.cn/showproblem.php?pid=2036
/*o为坐标原点,向量OA叉乘向量OB的一半就是三角形OAB的面积
且面积有方向,若向量OB在向量OA的顺时针方向,面积为负,逆时针方向
则为正。将所有以原点为起点的向量依次叉乘,即能将非多边形部分的面积抵消*/
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct point
{
int x,y;
}po[200];
int main()
{
int n;
int i;
int a,b;
double s;
while(scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
scanf("%d%d",&po[i].x,&po[i].y);
po[n]=po[0];
a=b=0;
s=0;
for(i=0;i<=n;i++)
{
s+=(a*po[i].y-b*po[i].x)*1.0/2;
a=po[i].x;
b=po[i].y;
}
printf("%.1lf\n",s);
}
return 0;
}