POJ1654-Area

这道题主要的注意的地方就是叉积有向面积公式使用的熟练度;

还有注意数据类型;

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;

char num[1000100];
int dir[10][2]={0,0,-1,-1,0,-1,1,-1,-1,0,0,0,1,0,-1,1,0,1,1,1};

int corss(int x1,int y1,int x2,int y2){
    return x1*y2-x2*y1;
}

int main(){
    //for(int i=1;i<=9;i++) cout<<dir[i][0]<<" "<<dir[i][1]<<endl;
    int T,len,x1,y1;
    long long ans;
    scanf("%d",&T);
    getchar();
    while(T--){
        scanf("%s",num);
        getchar();
        len = strlen(num);
            ans=0;
            x1 = 0;
            y1 = 0;
            for(int i=0;i<len-1;i++){
                ans+=corss(x1,y1,x1+dir[num[i]-'0'][0],y1+dir[num[i]-'0'][1]);
                //cout<<corss(x1,y1,x1+dir[num[i]-'0'][0],y1+dir[num[i]-'0'][1])<<endl;;
                x1 = x1+dir[num[i]-'0'][0];
                y1 = y1+dir[num[i]-'0'][1];
            }
            if(ans<0) ans = -ans;
            printf(ans%2==0?"%lld\n":"%lld.5\n",ans/2);
        
        
        
    }
    return 0;
} 
View Code

 

posted @ 2016-05-09 00:21  FireCool  阅读(143)  评论(0编辑  收藏  举报