Gym 102501F Icebergs

题目

Tania is a marine biologist. Her goal is to measure the impact of climate change on the population of Macaroni penguins. As most species of penguins, Macaroni penguins live in the southern hemisphere, near Antarctica. Tania is primarily focused on the population of Macaroni penguins near the “Îles Nuageuses” (in English, “Cloudy Islands”).
During summer, the ice around the islands melt and the islands become too small to host all the birds. Some penguins live on the icebergs floating around. For her study, Tania needs to measure the area of those icebergs.

Using satellite imagery and image recognition, Tania has obtained a map of the icebergs and your goal is to measure their area. The island studied by Tania is quite small and the Earth can locally be approximated as a flat surface. Tania’s map thus uses the usual 2D Cartesian coordinate system, and areas are computed in the usual manner. For instance, a rectangle parallel to the axes defined by the equations x1≤x≤x2 and y1≤y≤y2 has an area of (x2−x1)×(y2−y1).

In Tania’s representation, an iceberg is a polygon represented by its boundary. For each iceberg, Tania has noted the sequence of points p1,…,pk defining the border of the iceberg. The various icebergs never touch each other and they never overlap. Furthermore, the boundary p1,…,pk of an iceberg is always a “simple” polygon, i.e. no two segments in [p1;p2],…,[pk;p1] cross each other.

Input
The input consists of the following lines:

on the first line, an integer N, describing the number of polygons;
then N blocks of lines follow, each describing a polygon and composed of:
on the first line, an integer P, the number of points defining the polygon border,
on the next P lines, two space-separated integers x and y, the coordinates of each border point.
Limits

The number N of polygons is such that 1≤N≤1000.
Each polygon is described by P points with 3≤P≤50.
All coordinates are such that 0≤x,y≤106 .
Output
The output should contain a single integer: the total area rounded to the nearest integer below. In other words, the output should be a single line containing a single integer I such that the total area A of the polygons described in the input is comprised between I included and I+1 excluded (I≤A<I+1).

思路

  • 题目说给出的点相邻两点连线是不会和其他点的线交叉的,所以就意味着这个多边形就可以直接按所给顺序把点连起来。
  • 那么就只要按顺序解决每一个小三角形的面积就可以了,这里用到了内积求面积,注意一定要开long long,不然会溢出

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn =2e6+10;
double sum=0.0;
typedef long long ll;
struct node
{
    ll x,y;
}e[110];
int main()
{
    int n;
    cin >> n;
    while(n--)
    {
        int p;
        cin >> p;
        ll ans1=0;
        for(int i=0;i<p;i++)
        {
            cin >> e[i].x >> e[i].y;
        }
        for(int i=0;i<p;i++)
        {
            ans1+=e[i].x*e[(i+1)%p].y-e[i].y*e[(i+1)%p].x;
        }
        sum+=abs(ans1*0.5);
    }
    cout<<(ll)floor(sum)<<endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值