想看更多的解题报告: 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;
}