一不明生物从原点出发,各种绕啊绕,绕啊绕,绕啊绕。。。。。求所绕过的面积。
从原点出发,每走一次,与原点就形成了一个三角形。。他走过的区域,就是这些三角形的和
所以就是算三角形面积了。三点叉积除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;
}