• 省选模拟12 题解


    A. Colorado Potato Beetle

    暴力做法是直接bfs。

    优化的方法是离散化。

    将特殊的点的横纵坐标抽出来,然后用这些横纵坐标为1e12*1e12分成一个个块,容易发现每个块内的状态是一致的。

    然后用与暴力类似的方法即可,注意最后统计的是每个块的实际大小。

    B. Distinct Paths

    观察可知数据范围欺骗了你。

    似乎剪枝(注意去重复状态)的搜索就能过。

    一个更合理的做法是因为行是单调不降的,状压每个颜色的最早出现的列就好了。

    但是还是需要一些玄学剪枝。

    C. 回忆树

    容易发现问题可以转化为三部分累计答案。

    u->lca,跨过lca,lca->v。

    其中跨过lca的贡献比较容易维护,因为询问串总数不大,只要将跨过lca的串提出来,单独用kmp统计即可。

    考虑如何维护lca->v,把询问串放到sam上跑,我们关心的是lca->v这条链上(要扣掉最上面一部分)的endpos集合大小。

    显然使用广义后缀自动机就好了。

    因为关注一条链上的endpos集合大小,使用线段树合并。

    但是一条链上的区间不是连续的,所以使用重链剖分。(也可以用另一种方法直接树上前缀和)

    还有一个问题是u->lca,这里直接用广义后缀自动机不行了。

    但是显然将询问串翻转一下,问题就和lca->v一样了。

  • 相关阅读:
    hhhhhhhhhhhhhh
    hhhhh
    hhhhhhh
    项目为何失败,以及如何应对
    apollo组件部署报错分析
    ts中类型断言(类型守护)
    TypeScript详解
    flex:1的情况下,overflow:auto没有生效的问题
    vue2.x/vue3.0中使用ts
    Vue中实现数据列表无缝轮播
  • 原文地址:https://www.cnblogs.com/skyh/p/12249500.html
Copyright © 2020-2023  润新知