计蒜客 I小灰灰的笼外领地(计算多边形面积)

小灰灰的笼外领地
【题目描述】

小灰灰在某天吃饱喝足后爬出了自己的笼子出来做运动。小灰灰作为实验室的明星鼠,大家当然不能让它去一些危险的地方,因此春阳哥就在小灰灰笼前的平地上按照顺时针顺序点了几个点,并用线将其顺时针连接了起来。酱,小灰灰就拥有了一个属于自己的安全的“笼外领地”啦!

小灰灰在领地中逛久了自然感觉无趣,因此,它想要做一些有挑战的事情——写个程序算出来它的领地究竟有多大!然而,小灰灰实在是太小了,甚至连键盘的键都按不下去,所以它只好来请你帮助他完成这个任务咯!

【输入描述】
第一行一个整数T,表示有T(1<=T<=20)组数据。
对于每组数据:

第一行两个整数n ( 1 ≤ n≤10,000),表示春阳哥点了n个点。

接下来n行,每行两个实数x,y ( |x|,|y| ≤ 1,000),表示点的横纵坐标。

点以顺时针顺序给出,输入数据保证图形为多边形。

【输出描述】
对于每组数据,输出一个实数,表示小灰灰的领地面积。

输出保留两位小数。

样例输入

1
3
1 1
1 2
2 2

样例输出

0.50

Code:

#include<iostream>
#include<cstdio>
using namespace std;
double ans;
int n;
struct Point
{
    double x,y;
} a[1000005];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            cin>>a[i].x>>a[i].y;

        }
        ans=0;
        for(int i=2; i<=n; i++)
            ans+=(double)(a[i].x*a[i-1].y-a[i].y*a[i-1].x)/2.0;

        ans+=(double)(a[1].x*a[n].y-a[1].y*a[n].x)/2.0;
        if(ans<0.0)
            ans=-ans;
        printf("%.2lf\n",ans);
    }

    return 0;
}


公式:
for(int i=2; i<=n; i++)
ans+=(double)(a[i].x a[i-1].y-a[i].y a[i-1].x)/2.0;

ans+=(double)(a[1].xa[n].y-a[1].ya[n].x)/2.0;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值