[POJ1654]Area(计算几何-多边形的面积)

题目:

我是超链接

题意:

1左下 2下 3右下 4左 5回到原点 6右 7左上 8上 9右上
起点在原点,按照操作进行,走出来一个多边形,求多边形的面积。

题解:

这个就是裸题呀,然后我写了一发。。GG没看空间限制M了
求面积

for (int i=2;i<n;i++) area+=cj(dian[i]-dian[1],dian[i%n+1]-dian[1]);
area/=2; area=abs(area);

而且因为叉积本身有正负,所以每次去做不用求abs,但是因为面积需要是个正数,所以最后要取abs
对于这道题来说对longlong取绝对值必须手写= =

代码:

#include <cstdio>
#define LL long long
using namespace std;
int c[10][2]={{0,0},{-1,-1},{0,-1},{1,-1},{-1,0},{0,0},{1,0},{-1,1},{0,1},{1,1}};
struct po
{
    LL x,y;
    po(LL X=0,LL Y=0){x=X;y=Y;}
};char fx[1000005];
po operator -(po x,po y){return po(x.x-y.x,x.y-y.y);}
LL abs(LL x){return (x>0)?x:-x;}
LL cj(po x,po y){return x.x*y.y-x.y*y.x;}
int main()
{
    int T;scanf("%d",&T);
    while (T--)
    {
        LL x=0,y=0;int n=0;
        po p=po(x,y);
        scanf("%s",fx);int i=0;
        po a,b;LL area=0;
        while (fx[i]-'0'!=5)
        {
            x+=c[fx[i]-'0'][0]; y+=c[fx[i]-'0'][1];
            a=po(x,y);
            if (i) area+=cj(b-p,a-p);
            i++;b=a;
        }   
        area=abs(area);
        printf("%lld",area/2);
        if (area&1) printf(".5");
        printf("\n");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值