想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:一个坐标系,从原点开始走,然后1-4分别代表,向右下走,向右走,向右上走,向下走,5代表回到原点,6-9代表,向上走,向左下走,向左走,向左上走。(看翻译直接无限WA),给出一串包含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 <stdio.h> #include <string.h> #include <math.h> 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; scanf("%d",&tmp); while(tmp--){ scanf("%s",s); t=strlen(s); if(t<3) {printf("0\n");continue;} 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; } if(area<0) area=(-1)*area; if(area%2==0) printf("%I64d\n",area/2); else printf("%I64d.5\n",area/2); } return 0; }