zoukankan      html  css  js  c++  java
  • 省选模拟29 题解

    A. circle

    容易发现,如果存在一组合法答案,那么

    $k$ 个钦定点之间和 $n-k$ 个不被钦定点之间一定都是存在拓扑序的。

    考虑一个不被钦定点不被删去,一定满足这个点的连边情况恰好满足在 $k$ 个点的排名上存在分界点。

    上面那个条件使得不存在不被钦定点与两个被钦定点之间的环,另一种环是一个被钦定点和两个不被钦定点。

    实际上还有一个条件没有用到, $n-k$ 个点之间也是有拓扑序的,所以在拓扑序上以分界点为考虑对象做一个 dp 就可以了。

    B. 生成膜咒

    容易发现深度可以转化为 $border$ 的个数。

    考虑使用 sam 上的 endpos 集合,一个 border 出现,等价于同一个节点上两个不同的 endpos 。

    由于子串的问题,可以发现这个贡献要乘一个系数。

    最终的操作是:

    1.查询一条链的 $(len_x-len_{fail_x})*|endpos_x|$ 之和。

    2.将一条链的 enspos 加入一个元素。

    因为本题并不强制在线,树剖比较好打,lct也可以实现。

    C. simulate

    显然最终形成的序列与操作顺序无关。

    所以考虑随时保证 $[1,i)$ 中只含有数字 $0/1$ ,此时将位置 $i$ 处 $>=2$ 的数字消掉。

    右侧的贡献可以直接加在下一位上。

    可以发现对于左侧的贡献是找到为 $0$ 的前驱并赋值为 $1$ ,将该前驱的下一位的值 $-1$。

    实际上这个操作有些类似将 $0$ 不断右移。

    所以用一个单调栈维护为 $0$ 的位置,不断进行上述操作就完事了。

    容易发现循环内两次操作导致栈内元素个数减少 $1$ ,所以复杂度是正确的。  

  • 相关阅读:
    一篇不错的关于分析MVC的文章
    linux 下通过过 hbase 的Java api 操作hbase
    Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
    软件磁盘阵列 (Software RAID)
    查看端口的进程
    java的锁机制
    linux,强大的history命令
    mysql那些招
    mysql索引使用注意事项
    Linux下调节CPU使用的几种方法
  • 原文地址:https://www.cnblogs.com/skyh/p/12354563.html
Copyright © 2011-2022 走看看