求多边形面积,将多边形分割成若干个三角形
#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#include<math.h>
#define N 1000001
#define eps 1e-9
#define pi acos(-1.0)
#define P system("pause")
using namespace std;
struct point {
__int64 x,y;
}cur;
__int64 cross(point A,point B)
{
return A.x*B.y-A.y*B.x;
}
point fun(char a)
{
point p;
if( a=='8' ){ p.x=cur.x; p.y=cur.y+1; }
else if( a=='2' ){ p.x=cur.x; p.y=cur.y-1; }
else if( a=='6' ){ p.x=cur.x-1; p.y=cur.y; }
else if( a=='4' ){ p.x=cur.x+1; p.y=cur.y; }
else if( a=='9' ){ p.x=cur.x-1; p.y=cur.y+1; }
else if( a == '7' ){ p.x=cur.x+1; p.y=cur.y+1; }
else if( a== '1' ){ p.x=cur.x+1; p.y=cur.y-1; }
else if( a=='3' ){ p.x=cur.x-1; p.y=cur.y-1; }
return p;
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int t;
point w,v;
scanf("%d",&t);
while(t--)
{
string s;
cin>>s;
int len=s.length();
cur.x=cur.y=0;
__int64 area=0;
v=fun(s[0]);
for(int i=0;i<len-2;i++)
{
w = v;
cur=w;
v = fun(s[i+1]);
area+=cross(w,v);
}
if( v.x || v.y ) { printf("0\n"); continue; }
//printf("%lf\n",polygonarea(len-1));
if(area<0)
area=-area;
printf("%I64d",area/2);
if(area%2) printf(".5");
printf("\n");
}
// P;
return 0;
}