F. Icebergs

传送门

题意:

求由正整数点组成的简单多边形面积总和


思路:
用向量叉乘的思想做,但是这个叉乘的思想有一个方向问题,所以必须还要每一个都取abs, 还有一点思想就是只要我把整个一圈全求一遍,那最后就可以相互抵消,最后剩下要求的那块面积


总结:
有涉及到首尾的最后还要一个首的(类似于衔尾蛇),可以通过取模来优化代码,提高代码的可读性,求面积的板子,直接到手😙

点击查看代码

#include <bits/stdc++.h>
#define endl '\n'
#define IOS ios::sync_with_stdio(false);
using namespace std;	

typedef long long ll;
#define PII pair<ll, ll>
ll n, p, x, y;

int main()
{
	//IOS; cin.tie(0), cout.tie(0);
    cin >> n;
    ll ans = 0;
    for (int i = 1; i <= n; ++i)
    {
        ll sum = 0;
        cin >> p;
        vector<PII> points;
        for (int i = 1; i <= p; ++i)
        {
            cin >> x >> y;
            points.push_back({x, y});
        }

        for (int i = 0; i < points.size(); ++i)
        {
            sum += points[i].first * points[(i + 1) % (points.size())].second - points[(i + 1) % (points.size())].first * points[i].second;
        }
        
        ans += abs(sum);
    }

    cout << ans / 2 << endl;

	return 0;
}

posted @ 2022-08-06 15:08  YUGUOTIANQING  阅读(26)  评论(0)    收藏  举报