zoukankan      html  css  js  c++  java
  • jzoj 3956. 【GDOI2015模拟12.20】鸡腿の梦境

    这题因为有多种解法(传说中的好题,所以写写题解)
    我们应该有很多种方法来做的

    我们可以转化一下模型。
    然后发现可以将每个破船的半径增大鸡腿飞船半径。
    然后我们就可以将题目转化为一个点判断飞船是否可以围成一个圈,使其包住鸡腿飞船的坐标。

    (solution 1)

    (O(n^3))
    我们以鸡腿飞船为中心建立坐标系。
    然后对于(y)轴左边和右边的点分开。
    我们做两遍(floyd),分别看看能否从原点上面过和下面过。
    然后我们对于左右两边的两个点,看看是否上下都连通即可。

    (solution 2)

    (O(n^2))
    我们还可以更骚地去做。
    我们仍以鸡腿飞船为中心建立坐标系。
    然后对于其左边的和右边的分开,求出各自区域能连通的那些连通块并用并查集来存。
    接着我们可以(O(n^2))判断一下两个不同区域的点之间能否走到,若能则将两个连通块之间打标记(标记要分清是从原点上面走还是下面走)。
    若上下都能走到则为(NO)
    感觉这个方法要更优一些。

    (solution 3)

    有个很奇异的解法。
    我们求出所有的最大凸包。
    然后任意选(5)~(10)个点(位置随意),判断它与飞船点的连线与凸包的交点个数,若都为奇数则(YES),反之为(NO)
    正确性显然(只要选的点不被凸包所包含),但是这个实现问题嘛。。。
    至少我还不太会。。。

    转载需注明出处。
  • 相关阅读:
    Codeforces Round #534 (Div. 2) D. Game with modulo 交互题
    传球游戏 dp
    欧拉通路和欧拉回路
    HDU 1116
    HDU 4970
    HDU 4557
    HDU 4864
    HDU 1565
    HDU 3046
    HDU 4240
  • 原文地址:https://www.cnblogs.com/jz929/p/12176850.html
Copyright © 2011-2022 走看看