Mow
分析
将多边形的边向内部缩 r 个单位长度,然后这些边所围成的内部区域,就是圆心的合法范围,该范围也是一个多边形,假设面积是(a),周长是(b),那么可以知道圆可以覆盖的面积是 (a + b * r + pi *r^2)。现在问题转换为了求这些边所围成的区域,这正是半平面交所要做的事情。
需要用到的知识点:
- 极角排序
- 直线平移
- 直线求交点
- 单调队列求半平面交
- 多边形利用三角剖分求面积,求周长
另外需要注意的是该题目精度有些卡,需要用longdouble,另外要注意一些常用函数后面加 l,比如acos要换成acosl,sqrt要换成sqrtl等。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
#define dbg(x...) do { cout << "