zoukankan      html  css  js  c++  java
  • 题解 P2827 【蚯蚓】

    题意简述:

    神刀手有很多蚯蚓,每次把最长的一条切成⌊\(px\)⌋和\(x\)-⌊\(px\)⌋两段。(显然p值大小是固定的,\(x>=0\),所以这两段的大小关系不变)

    要问的是

    1. \(m\)秒内,每一秒被切断的蚯蚓被切断前的长度(有\(m\)个数),输出时只要输出秒数是t的倍数的就行了
    2. \(m\) 秒后,所有蚯蚓的长度(有 \(n+m\) 个数)。只要依次输出从大到小排名是t倍数的就行了

    做法:

    我们用3个队列来保存数据,

    • q1存储剩下所有的没被切过的蚯蚓,

    • q2存储切出的所有⌊\(px\)

    • q3存储切出的所有\(x\)-⌊\(px\)

    由于蚯蚓是不会越长越长的,所以每次刚切完的蚯蚓和之前切的蚯蚓相比较,⌊\(px\)⌋一定比之前所有的⌊\(px\)⌋要小,\(x\)-⌊\(px\)⌋一定比之前所有的\(x\)-⌊\(px\)⌋要小。

    只要在第一次操作前排好序,每个队列中的蚯蚓就是按长度从大到小的。

    对于第一个问题,每次只需比较每个队列中队首的蚯蚓,选出最大的弹出,切割后再放进各自的队列

    对于第二个问题,每次比较每个队列中队首的蚯蚓,选出最大的弹出。

    时间复杂度\(O(nlogn+m+n)\) 可行

    (我对我算的时间复杂度表示怀疑,有问题的话dalao可以拼命吐槽)


    代码

    代码请参考@世外明月 神仙的

    我觉得ta写的比较简洁易懂


    反思

    • 题目好长啊
      (对我来说TNT),虽然比什么大模拟好,但是要仔细读
    • 要找到问题所在,TLE的主要原因是每次找最大的时间太久,要找出隐藏的单调性

    ——\(cz\)

    qaqaq
  • 相关阅读:
    vuejs学习小结(数据处理)
    vuejs的遇到的问题小结
    ES6 对象扩展
    webpack的两个难点
    Sass入门:第二章
    Sass入门:第一章
    Effective JavaScript :第六章
    Effective JavaScript :第五章
    Effective JavaScript :第四章
    Effective JavaScript :第三章
  • 原文地址:https://www.cnblogs.com/zdsrs060330/p/13095089.html
Copyright © 2011-2022 走看看