题目意思就是求多边形的面积。用叉乘,用原点(0,0)和多变形的每两个相邻点(按一定的方向,可以是顺时针,也可以是逆时针)构成一个三角形,求有向面积,所有的有向面积之和的绝对值除以2即为所求。
以下是代码:
- #include<cstdio>
#include<iostream>
using namespace std;
const int N=1000010; - struct point
{
__int64 x,y;
}p0,p1;
int dir[10][2]={{0,0},{-1,-1},{0,-1},{1,-1},{-1,0},{0,0},{1,0},{-1,1},{0,1},{1,1}};
char str[N]; - __int64 getarea(point p1,point p2)
{
return p1.x*p2.y-p2.x*p1.y;
}//由于是原点到p1、p2的向量,所以求面积时只要这样就行了 - int main()
{
int T;
scanf("%d",&T);
while(T--)
{
p0.x=0;p0.y=0;
int i;
__int64 area=0;
scanf("%s",str);
for(i=0;str[i];i++)
{
int id=str[i]-'0';
p1.x=p0.x+dir[id][0];
p1.y=p0.y+dir[id][1];
area+=getarea(p1,p0);
p0=p1;
}
if(area<0) area=-area;
__int64 res=area/2;
if(res*2==area)
printf("%I64d/n",res);
else
printf("%I64d.5/n",res);
}
return 0;
}