0
点赞
收藏
分享

微信扫一扫

【NOIP模拟】20/02/09

zibianqu 2022-08-16 阅读 76


  • 题解:考虑用数据结构维护以一个点为右端点时,每一个左端点的答案
    考虑新增一个数的贡献,就是对一个左端点的区间的区间加
    于是用主席树实现区间加,堆维护每一个右端点的最优答案
    取出最优答案后将那个位置改为

  • 题解:实现通配符匹配,定义从开始匹配的权值为
    通配符的权值为 0, 注意一下下标处理,我用了 4 次,2 次,感觉不是最优解法
    ​​

  • 题解:好题
    有两种思路,第一种是用总的减去重复的,第二种是钦定重复的只被统计一次,两种方法都可以成功
    建出 树后前缀的总个数是结点数,那么不考虑重复就是结点数的平方
  • 【NOIP模拟】20/02/09_权值_14

  • 考虑去掉重复的,我一开始的想法是枚举绿色部分,因为绿色部分是 树上的一个前缀,那么当前重复的就是以绿色部分为前缀的串个个数 * 以绿色部分为后缀的串的个数,但自己把自己 掉了
  • 【NOIP模拟】20/02/09_结点_17

  • 如果有 3 个重复的串的话会被绿色枚举到 3 次,题解注意到了更巧妙的性质
  • 【NOIP模拟】20/02/09_后缀_18

  • 紫色串是出现在前缀中的蓝色串的后缀,那么紫色串一定在蓝色串到根的 链上
    考虑解决刚才减多了的问题,考虑应该被减几次
  • 【NOIP模拟】20/02/09_后缀_20

  • 注意到紫色串和它的后缀又可以贡献一个重复串,那么一个串的被统计次数就是 链上一段的点数,我们的策略就是对于每一对 减一次,就可以不重不漏,就是那个著名的 “ 点 - 边 = 1 ”
    这么做以后,我们就可以枚举一个蓝色串,找到其跳一个 的紫色串,蓝色串向上跳紫色串的深度找到绿色串,统计绿色串作为多少个串的后缀,这个就是 子树的
    于是我们可以对原题进行加强,变成 ,通过倍增来跳做到
  • 解法 2:考虑让每一个串只被统计到一次,注意到一个串在 自动机上匹配的路径是唯一的
    我们可以变成统计合法的路径条数。
    考虑什么样的路径是合法的,第一种是一直向下走一个前缀但这个前缀可以分解成两个前缀,这个可以用 判,第二种是跳过 ,假设第一次跳 后走了 步,那么如果停下来的点深度 这个串就是合法的。
    同时注意到最后形成的串长不会超过 ,于是我们可以设计 表示第一次跳 后走了 步,到结点 的合法方案,复杂度 ,如果按上面的方法加强就可以卡掉
    ​ 两种方法都值得推敲,是一道好题,考场上与第一种方法接近,但没有发现更多的性质


举报

相关推荐

0 条评论