HDU-2036 Shoelace公式计算多边形面积

Input
输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆时针顺序给出的n个顶点的坐标(x1, y1, x2, y2… xn, yn),为了简化问题,这里的所有坐标都用整数表示。
输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理。
Output
对于每个测试实例,请输出对应的多边形面积,结果精确到小数点后一位小数。
每个实例的输出占一行。

Sample Input
3 0 0 1 0 0 1
4 1 0 0 1 -1 0 0 -1
0
Sample Output
0.5
2.0
解题思路:
Shoelace公式
(逆时针)
代码:

#include
using namespace std;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return x*f;
}
struct p{
	int x,y;
};
int det(p a,p b){
	return a.x*b.y-a.y*b.x;
}
int main(){
	int n;
	while(n=read()){
		double s=0;
		p a,b,t;
		a.x=read(),a.y=read();
		t=a;
		for(int i=1;i<n;++i){
			b.x=read(),b.y=read();
			s+=det(a,b);
			a=b;
		}
		s+=det(a,t);
		printf("%.1lf\n",s/2);
	}
	return 0;
}

你可能感兴趣的:(hdu,ACM_计算几何)