SAM的一些题?

bzoj4180: 字符串计数(口胡

我们考虑给你一个最终构造出来的串,他最小次数是怎么被构造出来的
那么就是从前往后扫,在 S A M SAM SAM上跑,如果跑不动了那就从头开始走,并且把次数累加
显然这样构造是最小的…
那么我们预处理一个数组 d i s [ i ] [ j ] dis[i][j] dis[i][j],表示在 S A M SAM SAM上以 i i i字符开头,并且要求下一个串的开头是 j j j的最小串长
然后就可以愉快二分+矩乘/倍增floyd了
注意 n n n 1 e 18 1e18 1e18,所以弄的时候如果加起来大于 1 e 18 1e18 1e18了就赋成 1 e 18 1e18 1e18,这样就避免高精度的出现

bzoj4032: [HEOI2015]最短不公共子串

四合一?
第一问直接枚举第一个串的子串,在第二个串的SAM上跑
第二问直接枚举第一个串的子串,显然在第二个串中匹配的位置越前越好,那么直接转移
第三问就设一个 f [ i ] [ j ] f[i][j] f[i][j]表示在第一个串的第 i i i个位置,在第二个串的 S A M SAM SAM上的第 j j j个状态的最小值,扔进堆里做一个类似dij的
第四问直接 f [ i ] [ j ] f[i][j] f[i][j]表示第一个串的第 i i i个位置,第二个串的第 j j j个位置,然后枚举 26 26 26个字符转移

bzoj4698: Sdoi2008 Sandy的卡片(口胡

差分一下就成了求 n n n个串的最长公共子串,答案就是他们加一
可以把第一个位置强行变成不一样的
然后思考了一下就是一个区间数颜色问题…把每个点挂一个vector然后最后离线扫parent树的DFS序

bzoj3879: SvT

em收获一个虚树板子??
对反串建SAN,然后把parent树搞出来
两个状态的最长公共后缀就是他们的LCA的 m a x d e p maxdep maxdep
那么把虚树建出来
随意dp即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值