给定两个串,分别截取字串X和Y,连接组成X+Y,求不同的X+Y的方案数。

对于X+Y,如果重复的部分其实就是从同一个X+Y的某个地方断开弄成不同的X和Y,那么只要使得X和X+Y匹配得最长就行了。

因此,对两个字符串分别建立后缀自动机A和B,在A中找字串X,当X的末尾不能接某个字符c时,在B中找以c为开头的所有字串。

注意字串的是n^2个,所以不管怎样都不能以暴力遍历自动机的方式来统计,而由于SAM是DAG,所以实际上是在两个DAG上进行dp。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define REP(i,a,b) for(int i=a;i<=b;i++)
#define MS0(a) memset(a,0,sizeof(a))using namespace std;typedef unsigned long long ll;
const int maxn=1000100;
const int INF=1e9+10;char s[maxn],t[maxn];
ll dp1[maxn],dp2[maxn];struct SAM
{int ch[maxn][26];int pre[maxn],step[maxn];int last,tot;void init(){last=tot=0;memset(ch[0],-1,sizeof(ch[0]));pre[0]=-1;step[0]=0;}void add(int c){c-='a';int p=last,np=++tot;step[np]=step[p]+1;memset(ch[np],-1,sizeof(ch[np]));while(~p&&ch[p][c]==-1) ch[p][c]=np,p=pre[p];if(p==-1) pre[np]=0;else{int q=ch[p][c];if(step[q]!=step[p]+1){int nq=++tot;step[nq]=step[p]+1;memcpy(ch[nq],ch[q],sizeof(ch[q]));pre[nq]=pre[q];pre[q]=pre[np]=nq;while(~p&&ch[p][c]==q) ch[p][c]=nq,p=pre[p];}else pre[np]=q;}last=np;}
};SAM A,B;ll dfs2(int u)
{if(u==-1) return 0;ll &res=dp2[u];if(~res) return res;res=1;REP(c,0,25) res+=dfs2(B.ch[u][c]);return res;
}ll dfs1(int u)
{ll &res=dp1[u];if(~res) return res;res=1;REP(c,0,25){if(~A.ch[u][c]) res+=dfs1(A.ch[u][c]);else res+=dfs2(B.ch[0][c]);}return res;
}void solve()
{A.init();B.init();int ls=strlen(s),lt=strlen(t);REP(i,0,ls-1) A.add(s[i]);REP(i,0,lt-1) B.add(t[i]);memset(dp1,-1,sizeof(dp1));memset(dp2,-1,sizeof(dp2));printf("%I64u\n",dfs1(0));
}int main()
{freopen("in.txt","r",stdin);int T;cin>>T;while(T--){scanf("%s%s",s,t);solve();}return 0;
}

View Code

转载于:https://www.cnblogs.com/--560/p/5457826.html

hdu5343 后缀自动机+dp相关推荐

  1. BZOJ2806(后缀自动机+DP)

    题目:http://61.187.179.132/JudgeOnline/problem.php?id=2806 题意:给定一个由M个01串组成的字典.依据这个字典和一个阀值L,可以断言一个01串是否 ...

  2. Cool Slogans[CF700E][后缀自动机][Dp]

    文章目录 题目 思路 代码 题目 Luogu n ≤ 2 ⋅ 1 0 5 n\le 2\cdot 10^5 n≤2⋅105 思路 性质: ∃ s i \exist\quad s_i ∃si​ 是 s ...

  3. 洛谷P3975【天津省选2015】(后缀自动机DP)

    题目链接 https://www.luogu.com.cn/problem/P3975 题解 此题非常经典且重要,是sam的函谷关,必须拿下. 记录每个点endpos大小的方法是在parent树从下往 ...

  4. 后缀自动机+DP BZOJ 3238 差异

    分析: 其实题目就是要求任意两个后缀T[i]和T[j] (i< j) 的 LCP长度之和. 首先对输入的字符串反转后建立SAM. 令 一个节点的Max表示它代表的最长子串. 推论1: 原串中的两 ...

  5. BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并)

    BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并) 题目链接 题意 nnn个字符串,询问每个字符串一共有几个子串至少出现在nnn个字符串中的kkk个 思路: 拓扑 建广义后缀自动机, dp ...

  6. SPOJ 7258 (后缀自动机)

    转载:http://hzwer.com/4492.html 给一个长度不超过90000的串S,每次询问它的所有不同子串中,字典序第K小的,询问不超过500个. 搞出后缀自动机 dp处理出每个点往下走能 ...

  7. BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...

  8. BZOJ 4032 luogu P4112 [HEOI2015]最短不公共子串 (DP、后缀自动机)

    这其实是道水题... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4032 (luogu)https://www.luog ...

  9. UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)

    UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...

最新文章

  1. switch能使用的数据类型有6种
  2. 在某些输入上删除IE10的“清除字段”X按钮?
  3. 老焦专栏 | 如何做一个有说服力的方案?
  4. datagrid里面某一行双击打开代码
  5. resource.arsc二进制内容解析 之 Dynamic package reference
  6. MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
  7. React Fiber源码逐个击破系列-scheduler
  8. 【CodeForces - 151D】Quantity of Strings (字符串问题,思维推导,有坑)
  9. MySQL 修改视图
  10. 3.12 SE11创建锁对象
  11. 循环依赖 三级缓存解决
  12. Python 3.7 已上架 Microsoft Store,让你在 Windows 轻松使用 Python
  13. VMware下CentOS6.8配置GFS文件系统
  14. Windows10 右键“打开文件所在位置”找不到应用程序
  15. GDI函数 StretchDIBits,StretchBlt 缩小图片会有黑点的问题解决办法
  16. 2021-2025年中国阿莫雷德行业市场供需与战略研究报告
  17. HTML5视频与字幕使用的介绍
  18. vue实现店铺装修h5用户端实现
  19. 【报错】python编码问题:UnicodeDecodeError:‘utf-8‘codec can‘t decode byte 0xce in position 52: invalid contin
  20. 计算机c盘无法扩展,C盘不够大怎么办 怎么扩展C盘容量合并硬盘分区

热门文章

  1. 【redis】批量删除key
  2. oracle查看执行最慢与查询次数最多的sql语句
  3. Weblogic 12c中修改SERVER NAME的方法
  4. python 删除文件、目录_python实现删除文件与目录的方法
  5. 快搜浏览器_郑秀晶因腿粗再上热搜:怎么减肥才能不反弹?
  6. iis 改了php ini不生效,Windows IIS 集成PHP时修改PHP.ini 配置后不生效问题
  7. linux配置python环境变量_linux添加PYTHONPATH环境变量
  8. 计算机类大一需要学什么原因,大一新生上大学要不要带电脑?我认为不论什么专业,电脑是必需品...
  9. oracle开机时间,[20201106]了解oracle数据库启动时间.txt
  10. mac nginx apache mysql php 一键_Mac 下搭建 apache / nginx+php+mysql