zoukankan      html  css  js  c++  java
  • 省选模拟22 题解

    A. 遮天蔽日

    学习了计算几何相关的很多新技巧。

    求过一点$P$,圆$O$的切线:通过两点距离、半径,用反三角函数可以解得一个角度,然后就可以算了。

    求直线$PQ$,与圆$O$的交点:作点$O$关于$PQ$的垂线,通过半径和垂线长度,可以算得垂足与交点的距离,然后就可以算了。

    求多边形的重心:任选一点$O$,选择顺时针(逆时针)上相邻的每个点对$(P,Q)$,对横纵坐标分别加权平均,加的权为面积。

    公转:使重心旋转,保持每个点与重心的相对位置不变,整个多边形的朝向不变。

    因为打的不是正解,所以伪了(在凸多边形下是正确的)。

    正解的意思大概是,让太阳与每个端点作一条直线,分别交在地球上。

    那么相邻的两个交点之间是否被覆盖的关系是相同的。

    所以任选相邻的两个交点形成的弧上任意一点,判断该点到圆的线段上是否与其他任意一条线段相交即可。

    B. 三元组

    这个题和一道叫做最长双回文串的题很像。

    容易发现那个对乘积的求和,可以拆成求和式*求和式。

    处理出每个点为右端点的左侧贡献,每个点为左端点的右侧贡献,然后枚举作乘积就好了。

    一个办法是打$manacher$,然后写恶心的等差数列差分。

    另一个办法是直接使用回文自动机,简单粗暴维护$fail$树上每个点对应的回文串个数、回文串总长度即可。

    C. 最有价值

    可以发现,这个东西有点像最大权闭合子图。

    然后是一些显然的建图。

    与一道叫做寿司餐厅的题很像。

    对于选每个点的代价,每种字符的第一个位置的代价为$b_i$,第一个位置之后的代价均为$a_i$。

    用寿司餐厅中的套路,首先令每个位置的代价都为$a_i$,如果选了至少一个位置,那么强制付出再$b_i-a_i$即可。

    魔改一下建图,用那些很套路的方法,可以将点数缩减到$O(n)$级别。

  • 相关阅读:
    HelloWorld
    CSS盒子模型
    CSS选择器
    Win右键管理员权限的获取
    本地存储
    python模块以及导入出现ImportError: No module named 'xxx'问题
    python pexpect 学习与探索
    VI查找与替换
    python 中__name__ = '__main__' 的作用
    python 脚本传递参数
  • 原文地址:https://www.cnblogs.com/skyh/p/12288887.html
Copyright © 2011-2022 走看看