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))

  • 相关阅读:
    火狐获取图片宽和高的方法
    JDBC连接本地sqlserver2005的方法
    war文件不在tomcat 的webapps运行
    javascript 去除空格 方法
    火狐显示图片的方法
    八款开源Android游戏引擎
    android 模拟器 hardWare 属性说明
    jqgrid 属性说明
    Java命名规范
    在MyEclipse里怎样一次性取消所有断点
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14724241.html
Copyright © 2011-2022 走看看