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

    写在前面:

    我好菜啊

    伯努利数和自然数幂和的式子都能忘

    A. 青蛙

    标签:

    贪心+二分

    题解:

    首先我们贪心的让尽量多的青蛙免费跳过去,可以二分求出

    考虑剩下的青蛙如何让费用最小:

    假如免费的青蛙非零,那么一定可以把中间的石头跳完

    这种情况下其他每个青蛙的最小花费一定是一次

    另一种情况是没有免费的青蛙

    直接让花费最小的青蛙把中间的石头跳一遍,其他的花费仍然都为一次

    B. 一起自习的日子

    标签:

    伯努利数

    题解:

    我们知道伯努利数有两种$B^{-}$和$B^{+}$

    其中:

    $$sumlimits_{i=0}^{n}C_{n+1}^{i}B^{-}_{i}=0$$

    $$B^{+}_{i}=(-1)^iB^{-}_{i}$$

    $B^{-}$和$B^{+}$都可以来表示自然数幂和:

    $$sumlimits_{i=0}^{n-1}i^m=frac{1}{m+1}sumlimits_{i=0}^{m}B^{-}_{i}C_{m+1}^{i}n^{m+1-i}$$

    $$sumlimits_{i=1}^{n}i^m=frac{1}{m+1}sumlimits_{i=0}^{m}B^{+}_{i}C_{m+1}^{i}n^{m+1-i}$$

    C. 字符串

    标签:

    主席树+$LCT$+$SAM$

    题解:

    设$ans[R][L]$代表也$R$为右端点的最长贡献

    考虑在$fail$树上更新$ans$数组

    对于$np$的祖先$p$

    对于$Lin[1,last[p]-len[p]]$

    $$ans[R][L]=max(ans[R][L],len[p])$$

    对于$Lin[last[p]-len[p]+1,last[p]$

    $$ans[R][L]=max(ans[R][L],len[p]-L+1)$$

    主席树区间对定值/等差数列取max即可

    复杂度$O(n^2log_2(n))$

    考虑用$LCT$优化:

    对于$np$会修改np到根的路径上的$last$值,用$access$实现

    对于$nq$会$cut$和$link$某些点

    然而我们必须让同一个$Splay$里的$last$全部相同

    这样便可以对于一个$Splay$只取出最大的$len$进行一次操作了

    所以$LCT$不能简单的$access$

    对于$cut$需要分为是否在同一个$Splay$

    $link$比较简单直接$Splay$后$fa$接上即可

    主席树的区间修改和单点查询其实可以通过二分转化为单点修改和区间查询

  • 相关阅读:
    Python 面向对象3-类变量与实例变量
    Python面向对象2-类和构造方法
    Linux LVM动态扩容
    Anslib 使用错误归纳
    Linux Centos7安装最新anslib
    Linux 配置最新的epel源
    Linux centos7安装python3并且不影响python2
    docker compose启动服务超时重启记录
    spring cloud学习(三)使用Ribbon实现客户端负载均衡
    spring cloud 学习(二)关于 Eureka 的学习笔记
  • 原文地址:https://www.cnblogs.com/AthosD/p/12182002.html
Copyright © 2011-2022 走看看