• 模拟36 题解


    A. 字符

    题中保证$p_i<=1e5$,还可以很显然地发现当总长度大于$p_{max}+c$,一定不会更优。

    于是枚举长度的大小。

    将每一个限制对长度取模。

    显然如果相邻两个字符所在的区间存在交集,就表示状态非法。

    于是得到$O(m*p_{max})$的暴力。

    发现在取模的过程中如果已经不合法,可以直接跳出。

     

    在随机数据下这个算法已经很优秀,

    但如果特殊构造也是能卡掉的:比如给出10000个字符0的位置,大部分算法无法剪枝。

     

    考虑优化。

    我们要求的其实就是每个字符在模意义下的最小值和最大值。

    于是直接预处理出每个点左右最近的一个有字符的点。

    在统计过程中不断给下标+len,表示当前考虑的一段区间,同一段区间内的最值是显然的。

    根据调和级数,这样做的复杂度为$O(p_{max}*logp_{max})$

     

    考试时这个题刚开始打的暴力,过了样例直接交了。

    因为有一个比较自信很难卡的剪枝,通过显示$submit$的时间,我猜测应该是A掉了。

    但心里还是很不安,打了一个st表,复杂度对了,调了一个小时。

    考完才发现暴力没删$freopen$,所以打了正解反而是对的?

     

    B. 蛋糕

    直接区间dp,

    考虑一下哪些状态是合法的就完了。

    C. 游戏

    考虑一条性质:

    由岐的路径一定为被一个莉露露带着跑,抛出,然后下一个没有动过的莉露露过来带着跑并抛出。

    第n个莉露露一定不会动。

    于是问题转化为最短路问题。

    暴力建边有$X^3$个,算上$dijkstra$的复杂度已经$O(X^3log)$,过不去。

    所以考虑优化建边。

    对于$a=0$,线段树优化建边是可行的。

    但是在$a!=0$的情况下,每个点向其它点的边权值为一个等差数列,线段树就萎了。

    考虑网络流中常用的建图技巧:

    每次移动的增量a是固定的,

    所以将每个点拆为三个点,分别表示在这个点,在这个点行方向被抛出中,在这个点列方向被抛出中。

    以下为具体建边:

    1.点1向点2,3建边,权值为让最近莉露露过来。

    2.点2,3向点1建边,权值为退出状态的b。

    3.点1向周围四个点建边,权值为c。

    4.点2,3分别向行、列建边,权值为a。

    精髓主要在于拆点的操作和第四种建边,成功地把一些边合在了一起,保证了边的数量为$X^2$级别。

  • 相关阅读:
    简析Java RMI 与 .NET Remoting
    实现一个压缩Remoting传输数据的Sink:CompressionSink (转载)
    智能部署与更新
    第二章:.NET Remoting基础知识
    创建以Microsoft .NET Remoting为基础的分布式应用架构
    vs2005如何防止代码被反编译
    使用.NET Remoting开发分布式应用——配置文件篇(转载)
    Remoting概述
    高级 .NET Remoting
    第一章:Remoting技术简介
  • 原文地址:https://www.cnblogs.com/skyh/p/11465139.html
Copyright © 2020-2023  润新知