• ZR提高失恋测3


    ZR提高失恋测3

    题目链接

    (感觉这一场比以往的简单了一些)

    估分 100 + 40 + 40

    得分 100 + 60 + 40

    ???

    A

    首先,我们能够想到一个比较简单的(n^2)做法,

    枚举答案子序列中两个(1)之间(0)的个数(就是题目中的距离),直接贪心能选就算,肯定不会似的答案更劣

    这样就有了(60)分的好成绩

    我们考虑如何优化这个暴力,

    由于0的个数不具有可二分性,所以不能对外层枚举进行优化,那么我们只能对这内层循环下手了

    发现我们每次暴力找(x)(0)这个过程太慢了,我们想到两个方式去优化

    首先 二分

    我们维护一下前缀(1)的个数

    每次二分查找一下下一次跳(x)(0)的位置

    其次

    倍增,感觉道题同二分把,把(x)二进制拆分然后求(k)级祖先

    注意写代码的时候有一个需要一个细节,就是如果最后一个匹配成功的是(1)

    或者最后一段的(0)没有匹配满的时候,最后一个的(100dots)的贡献是要减去的

    代码

    B

    首先这个([dis,1.1 imes dis])就肯定要搞点东西

    首先,还是非常朴素的暴力,我们对于每个点,都去维护一下到这个点的所有的路径的长度

    然后暴力合并

    之后读进来一个询问点就暴力lower_bound一下判断合法不合法,这样就有60分了

    我们上面的暴力并没有用到(1.1 imes dis)这个东西,我们仔细想一下有什么用?

    如果一个点有三条路径(x,y,z)满足

    (frac{z}{1.1} <x < y < z)

    那么(y)这一条路径是没有用的

    因为

    也就是(y)的功能能够完美的被(x,z)去代替

    这也就提示我们需要存的路径不会太多,那么有多少呢

    我们发现上面的情况

    (1.1 ,1.1^2 ,1.1^3,dots 1.1^x)

    极限情况也要是这样的数列才不会出现上面的情况

    (1.1^{450} > 10^{18})

    所以一个点的合法路径条数不会超过(450)

    我们可以考虑去只维护合法的部分

    我们维护一个递增的数组表示路径

    每次对于一条边(x->y)

    我们直接把两个数组类似归并排序的方式合并就好了

    只要在合并过程中出现

    上面(x,y,z)的情况,就把(y)踢掉

    最后依旧二分查一下答案就好

    代码

    C

    大分类讨论

    先咕咕咕

    代码

  • 相关阅读:
    将文件移出版本控制 (Revision Control)
    luogu 1966 火柴排队
    bzoj 1069 最大土地面积
    bzoj 1060 时态同步
    luogu 1901 发射站
    bzoj 1007 水平可见直线
    bzoj 2654 tree
    luogu 2024 食物链
    10.21 模拟赛
    tyvj 1013 找啊找啊找GF
  • 原文地址:https://www.cnblogs.com/wyxdrqc/p/11530434.html
Copyright © 2020-2023  润新知