#include<stdio.h> #include<string.h> #include<iostream> #include<math.h> using namespace std; int dx[10]={0,1,1,1,0,0,0,-1,-1,-1}; int dy[10]={0,-1,0,1,-1,0,1,-1,0,1}; char s[1000010]; __int64 area,x,y,px,py; int main() { int sum,t,tmp,i; cin>>tmp; while(tmp--) { scanf("%s",s); t=strlen(s); if(t<3) { printf("0\n"); } else { area=0; x=y=0; for(i=0;i<t-1;i++) { px=x+dx[s[i]-'0']; py=y+dy[s[i]-'0']; area+=(px*y-x*py); x=px; y=py; } area=fabs(area); if(area%2==0) cout<<area/2<<endl; else cout<<area/2<<".5"<<endl; } } return 0; }
计算几何,让原点和相邻的两个点的坐标进行叉乘,然后累加起来/2就是面积
由于数据的特殊性质,所有最后%2来判断是否有小数点