zoukankan      html  css  js  c++  java
  • 省选模拟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一样了。

  • 相关阅读:
    java内部类
    重新回顾JSP
    vs 链接动态库 (不用放在可执行文件同一目录)
    c++ 文件夹读取文件
    为人处世
    Windows常用软件
    windows好用的软件
    冒泡排序,快速排序,归并排序
    最大公约数、最小公倍数、所有约数
    linux U盘 硬盘 unable to mount
  • 原文地址:https://www.cnblogs.com/skyh/p/12249500.html
Copyright © 2011-2022 走看看