题目大意:一个坐标系,从原点开始走,然后1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。给出一串包含1-9的字符串,问你这些点所围成的面积。
/* 根据面积公式,Area=1/2*abs((x0*y1-x1*y0)+(x1*y2-x2*y1)...+(xn*yn-1-xn-1*yn)+(xn*y0-x0*yn)) , 把相邻两点和原点组成一个三角形,而总面积是这n个三角形面积的和,而三角形面积是两个相邻边向量的叉积。 */ #include<cstdio> #include<iostream> #include<cstring> #define N 1000010 #define lon long long using namespace std; char ch[N]; 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}; int main(){ int T;scanf("%d",&T); while(T--){ int x=0,y=0,len;lon area=0; scanf("%s",ch); len=strlen(ch); if(ch[len-1]!='5'||len<2){ printf("0 ");continue; } for(int i=0;i<len;i++){ int px=x+dx[ch[i]-'0']; int py=y+dy[ch[i]-'0']; area+=(lon)x*(lon)py-(lon)px*(lon)y; x=px;y=py; } if(area<0)area=-area; cout<<area/2; if(area%2) printf(".5"); printf(" "); } return 0; }