poj1654 - Area

来源:互联网 发布:淘宝网上茶杯犬多少钱 编辑:程序博客网 时间:2024/05/17 21:51

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

原创粉丝点击