• UNR #6 题解


    「UOJ747」面基之路

    难得有一道我做得起的水题。

    尝试二分答案,判定等价于检查是否存在一个点,使得在规定时间内 hehe 蚤和网友们都可以走到该点。检查能否走到某个结点是容易的,检查某条边上是否存在一个点相当于是检查集合的交集是否为空,转化成区间的并集是否覆盖了整条边,可以将区间排序之后扫描端点。

    复杂度为 \(O(nk\log V\log k)\),虽然复杂度很高但是跑起来挺快的。如果去掉外层二分也可以,这样的话每个人到边上某一点的时间可以描述为一个凸函数,我们就是要对于凸函数取 \(\max\) 之后算最小值。

    不过我听说好像有人写这个算法写挂了,那就先不管了吧

    「UOJ748」机器人表演

    「UOJ749」稳健型选手

    「UOJ750」小火车

    一道题让我彻底感受到了自己的愚蠢

    等价于求“是否存在两个不同的子集的和 \(\bmod p\) 之后相等”。由于我们保证了 \(2^n>p\),因此必然存在解。

    \(f_s\) 表示子集和 \(\bmod p\) 后为 \(s\) 的子集个数。我们要做的就是找出 \(f_s\) 中某一个 \(>1\) 的位置

    主动一点,我们尝试直接二分答案。二分一个上界 \(r\),我们相当于要求 \(\sum_{s=0}^rf_s\),如果这个和 \(>r+1\),那么 \([0,r]\) 之中必然存在一个 \(s\) 使得 \(f_s>1\),否则就不存在。

    Remark.

    虽然想到了 \(f\),也想到了要找一个 \(>1\) 的位置,但是始终没有想到直接去 \(f\) 上二分。

    查找的手段不够熟悉。也被之前见过的类似的题目误导了。

    怎么计算 \(f_s\) 某一位置上的前缀和?结合数据范围,我们可以想到 meet-in-middle。值得注意的是,左右两侧的子集的和可以预先 \(\bmod p\),这样两边的子集加起来最多是 \(2p-2\),因此我们只需要考虑子集和落在 \([0,r]\) 和落在 \([p,p+r]\) 两种情况,双指针扫一扫即可。

    找到了 \(r\) 之后,寻找一组解的过程也可以双指针。复杂度即为 \(O(n2^n)\)

    「UOJ751」神隐

    「UOJ752」Border 的第五种求法

    20pts 的做法是容易的,60pts 的做法不知所云(Border 的长度结构为人熟知,但是 Border 的出现次数结构我是听都没有听说过)。

    Border 的概念是同时作为前缀和后缀的串。后缀在 SAM 上的结构是显然的,就是后缀树链,但是前缀的结构不容易看到。如果单纯从后缀树的角度来看,前缀只能由 \(\operatorname{endpos}\) 来表征,不容易作为判断 Border 的依据。

    Note.

    如果一定要从后缀树的角度来看的话,我们至少可以得出这样的结论——后缀树链上每一个结点内至多只包含一个 Border

    但是有什么用呢?

    此时就要用到 SAM 的另一个组成部分 DAWG。前缀通过“逐个加字符”的方式生成,这个生成方式在 DAWG 很容易找到对应的转移路径。

    那么,询问 \([l,r]\) 的子串信息时,我们可以在 DAWG 上找出 \(s[l,r]\) 对应的路径,路径上结点和后缀树链上结点的交集恰好就是 Border 对应的结点集合。我们把这些结点的 \(\operatorname{endpos}\) 的权值加起来就是答案。

    为了解决 DAWG 的路径问题,我们对于 DAWG 做剖分,就可以将 DAWG 上结点的集合拆分成 \(O(\log n)\) 个区间。后缀树链的结构比较好,我们可以做一个 DFS,维护当前树链上的点在 DAWG 剖分上的出现情况,这样就可以直接查和了。

    怎么将 \(s[l,r]\) 拆分成 DAWG 上的路径?每次在一条重链上二分,用 hash 判一下就好了。

    复杂度可以做到 \(O(n\log n+q\log^2n)\)

    Remark.

    很多时候都忽略了 SAM 的 DAWG,而仅仅用上了后缀树。这样是对于 SAM 的弱化,从 Border 的问题中,我们也能看到后缀树的羸弱无力(毕竟它是后缀树,只有一个“方向”)。

    这导致我常常以为 SAM 在处理前缀信息的时候会很吃力。但现在结合了 DAG 剖分之后,DAWG 的结构也能够很好地刻画前缀的信息。这是一个很好的出发点。

  • 相关阅读:
    XSS 跨站脚本攻击之构造剖析(一)
    PHP 一个表单多个提交按钮,处理不同的业务逻辑
    Ajax 学习之动态获取,返回服务器的值
    Ajax 学习之获取服务器的值
    Ajax 学习之创建XMLHttpRequest对象------Ajax的核心
    H5开发之Eclipes 编码乱码问题
    PHP 表单提交多行数据,显示多个submit
    PHP 输出表格单元格的数据之用表单的方式;
    PHP 读取逐条数据库记录,以及提交下拉菜单选项
    mysql多个TimeStamp设置(转)
  • 原文地址:https://www.cnblogs.com/crashed/p/16572743.html
Copyright © 2020-2023  润新知