POJ 1654 Area 计算几何

#include<stdio.h>

#include<string.h>

#include<iostream>

#include<math.h>

using namespace std;

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;

    cin>>tmp;

    while(tmp--)

    {

        scanf("%s",s);

        t=strlen(s);

        if(t<3)

        {

            printf("0\n");

        }    

        else

        {

            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;

            }

            area=fabs(area);

            if(area%2==0)

                cout<<area/2<<endl;

            else

                cout<<area/2<<".5"<<endl;    

        }

    }

    return 0;

}

计算几何,让原点和相邻的两个点的坐标进行叉乘,然后累加起来/2就是面积

由于数据的特殊性质,所有最后%2来判断是否有小数点

你可能感兴趣的:(poj)