zoukankan      html  css  js  c++  java
  • 【计算几何】【推导】【补集转化】AtCoder Regular Contest 082 E

    题意:平面上给你N个点。对于一个“凸多边形点集”(凸多边形点集被定义为一个其所有点恰好能形成凸多边形的点集)而言,其对答案的贡献是2^(N个点内在该凸多边形点集形成的凸包内的点数 - 该凸多边形点集的点数)。问你N个点的所有凸多边形子点集的贡献之和是多少。

    因为是2的多少次方的形式,容易发现,它其实是一种在集合内取点的方案。

    于是对于N个点的任意一个子集而言,只要其凸包面积非零,它就会对答案恰好贡献1。因为你把它的凸包上的点拿出来当成一个“凸多边形点集”,把剩下的点当成一种取点方案,这样是不重复不遗漏地包含了所有“凸多边形点集”及其所有的取点方案。

    于是答案从2^N中扣去所有共线(面积为零)的子集即可。

    可以考虑N^2枚举点对,然后把剩下的N个点中在这条线上的数量都计算出来,假设为M,然后这条线对答案的扣除数就是2^M-M-1(要防止重复统计,不能算单点和无点的情况)。

    然后全扣完以后,我们再把单点和无点的情况(N+1)从答案里扣去。

    这样是O(N^3)。

  • 相关阅读:
    「杂文」随想录
    「小说」妖精舞于废墟之上
    昨日之盛,明日之俗 ~ SDOI2021 退役记
    P6292 区间本质不同子串个数
    「杂文」生之重
    「闭门造车」二叉分块树
    「杂文」雨色的魔法(一)
    「笔记」斜率优化 DP
    「笔记」后缀数组
    NOIP 2020 AFO 记
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7469371.html
Copyright © 2011-2022 走看看