• 「2019.7.25 考试」偶然发生


    今天不知道怎么回事突然考得高了一点。

    总的来说还是败在T3上了,前两题都挺水的,T3剩下俩小时。

    结果还是啥也没高出来,写了个假贪心拿到了5分的好成绩,和别人差就差在了T3,果然还是最难的一道题来决定胜败。

    题解:

    T1:暴力$ hash $ , $ kmp O(n) hash $ 也$ O(n) $,一样快,还不如写简单的$ hash $。

    T2:$ tarjan $ 缩点双,建出圆方树,在从$ n $的方点到1所在的方点的路径中,求非1和$ n $的割点数目,即为所求。

    T3:主要说说T3。

    稍微总结一下就是:答案单谷性和决策单调性。

    40分算法:对于序列建个图(其实是个环),把序列上两个相邻的蓝颜色之间的路径长度定为他们之间的红色寿司数目,然后对于每个点跑一次最短路(假的,$ dfs $两次就出结果了),然后看每个点到其他所有点的距离和,取$ min $即可。

    复杂度:$ O(n^2) $

    70分算法:对于化环为序列,长度乘2,相当与在其中取某个长度为$ n $的序列,使得蓝色到左边,红色到右边的最优分界对应的最优值,可以证明对于每一个长度为$ n $的序列,都存在一个单谷函数,使得谷值存在与某个分界处,这样三分极值,得到答案。

    复杂度:$ O(nlog_{1.5}n) $

    证明一下单谷函数。

    证明:

      先证最小值仅有一段连续区间。

      反证:

        假设最小值有两段不连续区间,$ a,b (a<b) $那么$a$左侧的向左,$b$右侧向右都是最优的,考虑$ a,b $中间的部分如何最优,发现这一段不管向左还是向右都可以最优,因为$ a $让他向右,$ b $让他向左。那么也就是说这一段区间都可以作为某种最优决策。也就是说,$ a,b $必然是一个连续区间。

      得到结论,最小值有且仅有一段连续区间。

      设一个最小值的位置是$ p $,$ x $处的答案为$ f(x) $

      那么

        $ f(p)<=f(p+1) $

        $ f(p)<=f(p+2) $

      分情况讨论:只考虑$ B $的贡献,同时$ R $会到达另一侧。

      推导$ f(p+i+2)<=f(p+i+1) $

      发现和$ f(p+i+1) $与$ f(p+i+2) $有关的变量只有$ color(p+i+2) $

      讨论$p+i+2$的颜色:

         a.$ p+i+2==B $ 那么以左所有蓝色代价不变,$ p+i+2 $以右所有蓝色代价不变。$ p+i $对比$ p+i+2 $只是多了一个向左的$ B $,由于$f(p+i<=f(p+i+1)$,因为最小值在$ p+i+2 $的左侧,也在那个$ B $的左侧,所以$ B $

         那么这个$ B $的代价向右一定是小于向左的,那么这个$ B $的代价一定是变大的。

         $ f(p+i+2)>f(p+i+1) $

         b.$ p+i+2==R $ 那么还是没有影响 ,

         $ f(p+i+2)=f(p+i+1) $

        所以$ p+i+1==R -> f(p+i+2)>=f(p+i+1) $

      以上$ a.b. -> f(p+i+1)<=f(p+i+2) $

      因为小于号具有传递性。

      所以对于任何右于偏离最优断点$ p $的断点$ i,j $。

      都满足:如果$ i<j $

          那么$ f(i)<=f(j) $

      同理得左于$ p $的$ i,j $

      都满足:如果$ i>j $

          那么$ f(i)<=f(j) $

      也就是说,断点答案函数呈现单谷形状。

    证毕。

      但是并非严格单谷函数,各个位置全部取等的话,答案最劣可以达到峰谷同值(就是常数函数),这个时候三分是否还是适用的呢?答案是不可以的。

        三分只适用于极值左右严格单调的峰谷函数,而我们证明出的函数含有等号,也就是会出现一段函数的值相等的情况,这时候三分无法确定究竟应该舍去哪一部分区间,这个时候三分法就不再适用了,但是考场上有人写了三分上去倒是拿到了65分,看起来可能是运气比较好,65分没有出现$ lmid $和$ rmid $在同侧同值的地方的情况,虽然是$ T70 $但是应该是夹杂了一些WA点,如果是纯粹的单谷函数的话,卡卡常数$ A $掉应该也没有问题。

    100分算法:我们三分的时候是在找一个点,让这个点的值达到最小,而每次都是$ log_{1.5n} $的三分,而如果我们能$ O(1) $找到最优决策点呢?当然不可能。但是可以达到均摊$ O(1) $的复杂度。

    怎么达到呢?我们发现对于每一个区间$ [i,i+n-1] $的决策具有单调不减性,也就是决策指针只往右走不往左走。

    为什么呢?

    证明一下。

    证明:

      数学归纳。

      设上一个区间$ [i-1,i+n-2] $的决策点是$ p $也就是函数在$ p $处成谷。

      对于下一个区间$ [i,i+n-1] $来说,两个区间的不同就是,$ [i,i+n-1] $在左侧少了一个,右侧多了一个。

      考虑一个某个点的贡献是他左右的$ R $的个数,如果在中间的$ R $左侧则向左,反之向右。我们说中间那个$R$就是最优决策。

      分类讨论:

      1.左侧少的是$ B $,那么右侧一定多出了一个$ B $,这样的话原指针仍然是最优指针之一是没有影响的。

      2.左侧少的是$ R $,那么右侧多出一个$ R $,这样的话中间的$ R $就向右边移动了,决策最优指针也在向右移动。

      所以对于任何一个区间$ i,j $

      都满足:如果$ i<j $

          那么他们的决策指针$ p_i<=p_j $

    证毕。

      有了这个性质直接单调指针瞎扫就行了。

  • 相关阅读:
    XSS漏洞学习笔记
    【react】使用 create-react-app 构建基于TypeScript的React前端架构
    React-使用装饰器
    探究Hybrid-APP技术原理
    getBoundingClientRect使用指南
    React.js + LiveReload配置详解
    《高性能JavaScript》学习笔记(2)——日更中
    JavaScript设计模式学习之路——继承
    JavaScript数组去重的四种方法
    《高性能JavaScript》学习笔记——日更中
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11247206.html
Copyright © 2020-2023  润新知