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;
}