zoukankan      html  css  js  c++  java
  • 5.1总结

    开场就开始猛干A
    然后想了一下发现可以容斥
    容斥后就变为了计算公共子串方案数。
    每种本质不同子串只有最左边的和最右边的有用。
    然后就是区间加等差数列,用线段树做。
    由于好久没写sam了,调了很久才过了样例。
    结果交上去被卡成暴力分了。
    这是因为没有对拍,没有测极限数据

    题解:
    A
    好久都没碰过字符串了
    考虑容斥,用([1,i])本质不同字符串+([i+1,n])本质不同字符串-同时出现在([1,i][i+1,n])中的本质不同字符串。
    求前,后缀本质不同字符串数是经典问题(SDOI2016生成魔咒),用sam解决,每次加上后缀点的len-后缀点父亲的len。
    同时出现在([1,i][i+1,n])中的本质不同字符串,可以枚举每一种本质不同字符串考虑它的贡献。
    如果它对(i)分割点有贡献,则必须有一个该字符串的右端点在(i)左边,必须有一个必须有一个该字符串的左端点在(i)右边。
    它的出现位置显然是一个区间。
    显然只有最左,最右的出现位置有用,可以在sam上dfs求出最左,最右出现右端点
    这等价于枚举sam上的每个节点,每个节点代表串上的一类出现右端点相同的子串。
    它对答案的贡献是区间加一次函数。
    这显然可以用线段树维护,维护区间一次函数斜率,截距即可。
    时间复杂度(O(nlog_2n))

  • 相关阅读:
    PHP form 表单传参明细研究
    php返回数据库查询时出现Resource id #2
    AJAX避免服务器调用上个页面缓存的办法
    错误提示sudo: no tty present and no askpass program specified Sorry, try again.
    lua创建文件和文件夹
    ngx.lua中遇到的小问题2
    [Puzzle] 蚂蚁路线碰撞问题
    [问题记录] 操作符连写
    [工具] XMind
    Qt Creator快捷键
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14724241.html
Copyright © 2011-2022 走看看