由于是第一次所以只能打Div.3
Bitwise swaps
枚举 \(2^k\) ,将包含这一位的 \(a_i\) 连边,并查集维护联通性。
S -> T 看成置换,置换合法当且仅当每一个环内的数联通。
Sequence GCD
枚举答案,将 \(S=\sum a - \sum b\) 分配到每个 \(a_i\) 上。
具体地,答案 \(ans\) 需要满足 \(ans \mid S\) 且 \(\frac{S}{ans} \le \sum_i \lfloor \frac{a_i}{ans} \rfloor\) ,后者可预处理得到,详见 code 。
Area Sums in Convex Polygons
最后一题
Part. I 算法流程?
- 枚举每个点计算以其为一个端点的对角线的权值。
- 二分查找权值方向的分割位置,此时需要查询 \(\left[x,mid \right]\) 区间的多边形面积。
- 假设当前点为 \(x\) ,二分出的位置是 \(t\) ,那么其中一侧的面积即为 \(t-x-1\) 个多边形的面积和。
- 最后这个使用数据结构如 线段树/ST表等 维护。
Part. II 如何快速计算 连续多个点 组成的多边形面积?
将所有点跟原点连线,维护每条边对应三角形的面积。
将 \(l,r\) 之间的三角形面积之和减去三角形 \(\left( S,l,r \right)\) 面积即可。
Part. III Step 4 如何完成?
参考 Part.II 的方法,使用割补法,将每个多边形补成 \(x\) ~ \(t\) 的多边形。
同时利用叉积的分配律(假,根本不能这么用,模是没有分配律的)快速计算跟原点组成三角形的面积和。
维护向量的前缀和 以及 小三角形面积的二维前缀和。
于是乎。。上面错掉了。
后来知道了鞋带定理(Shoelace Formula)这么个东西,用来计算任意多边形面积的。
实际上就是将多边形三角剖分之后用叉乘求面积。
于是就可以快速维护了。