zoukankan      html  css  js  c++  java
  • CF1146G

    CF1146G - Satanic Panic

    题目大意

    给定平面上(n)个点,求能够构成五角星的五元组数目


    分析

    实际上就是求五元凸包数目,下面直接考虑(k)元的形式

    考虑凸包的两种判定方法:

    1.所有转角(<pi)

    然而这并不好实现

    2.一个凸包可以根据(x_i)最大、最小的两个点分成上下两部分,上下分别判断转角(<pi)

    (可以通过随机旋转规避(x_i)相同的情况)

    (这题(k)较小,或许可以上下暴力枚举?)

    一般的情况,枚举(x_i)最小的点(A)

    然后令(dp_{i,j})表示当前凸包最后一条折线为((i,j)),然后不断接新点

    最后合并上下两个凸包

    直接实现,单次(dp)状态(O(n^2k)),转移(O(n)),复杂度为(O(n^4k))

    优化:

    ((i,j) ightarrow (j,k)),可以先确定(j)

    然后按照转角顺序枚举(k),双指针完成所有(k)的转移

    如果预处理每个点出发的转角序,则预处理(O(n^2log n)),总复杂度为(O(n^3k))

    (Code消失了)

  • 相关阅读:
    C语言I博客作业09
    请看这里
    C++ 面向对象学习笔记[1]
    graphviz的使用
    KDE安装后的一些随笔
    近期内容整理
    链表
    理解C++ lvalue与rvalue
    再看“笕实智慧校园”——作品的复盘[1]
    无题
  • 原文地址:https://www.cnblogs.com/chasedeath/p/14800665.html
Copyright © 2011-2022 走看看