POJ 1654 Area (叉积求三角形面积)

一不明生物从原点出发,各种绕啊绕,绕啊绕,绕啊绕。。。。。求所绕过的面积。

从原点出发,每走一次,与原点就形成了一个三角形。。他走过的区域,就是这些三角形的和

所以就是算三角形面积了。三点叉积除2就是三角形面积了

//Memory: 1228K		
//Time: 32MS
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
using namespace std;
char c[1000006];
struct POINT
{
	int x,y;
};
__int64 multiply(POINT sp,POINT ep,POINT op) 
{ 
	return((sp.x-op.x)*(ep.y-op.y)-(ep.x-op.x)*(sp.y-op.y)); 
}
int main()
{
	int cas;
	cin>>cas;
	while(cas--)
	{
		__int64 area=0;
		POINT p1,p2,p0;
		p0.x=0;p0.y=0;
		p1=p0;p2=p0;
		memset(c,0,sizeof(c));
		cin>>c;
		int l=strlen(c);
		for(int i=0;i<l;i++)
		{
			int k=c[i]-'0';
			switch(k)
			{
			case 1:p2.x=p1.x-1;p2.y=p1.y-1;break;
			case 2:p2.x=p1.x;p2.y=p1.y-1;break;
			case 3:p2.x=p1.x+1;p2.y=p1.y-1;break;
			case 4:p2.x=p1.x-1;p2.y=p1.y;break;
			case 5:p2=p1;break;
			case 6:p2.x=p1.x+1;p2.y=p1.y;break;
			case 7:p2.x=p1.x-1;p2.y=p1.y+1;break;
			case 8:p2.x=p1.x;p2.y=p1.y+1;break;
			case 9:p2.x=p1.x+1;p2.y=p1.y+1;break;
				break;
			}
			area+=multiply(p1,p2,p0); 
			p1=p2;
		}
		if(area<0)
			area=0-area;
		if(area%2)
			cout<<area/2<<".5"<<endl;
		else
			cout<<area/2<<endl;
	}
	return 0;
}


你可能感兴趣的:(c,struct,生物)