hdu5343 后缀自动机+dp
给定两个串,分别截取字串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相关推荐
- BZOJ2806(后缀自动机+DP)
题目:http://61.187.179.132/JudgeOnline/problem.php?id=2806 题意:给定一个由M个01串组成的字典.依据这个字典和一个阀值L,可以断言一个01串是否 ...
- 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 ...
- 洛谷P3975【天津省选2015】(后缀自动机DP)
题目链接 https://www.luogu.com.cn/problem/P3975 题解 此题非常经典且重要,是sam的函谷关,必须拿下. 记录每个点endpos大小的方法是在parent树从下往 ...
- 后缀自动机+DP BZOJ 3238 差异
分析: 其实题目就是要求任意两个后缀T[i]和T[j] (i< j) 的 LCP长度之和. 首先对输入的字符串反转后建立SAM. 令 一个节点的Max表示它代表的最长子串. 推论1: 原串中的两 ...
- BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并)
BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并) 题目链接 题意 nnn个字符串,询问每个字符串一共有几个子串至少出现在nnn个字符串中的kkk个 思路: 拓扑 建广义后缀自动机, dp ...
- SPOJ 7258 (后缀自动机)
转载:http://hzwer.com/4492.html 给一个长度不超过90000的串S,每次询问它的所有不同子串中,字典序第K小的,询问不超过500个. 搞出后缀自动机 dp处理出每个点往下走能 ...
- BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2806 (luogu) https://www.luogu.org/pro ...
- BZOJ 4032 luogu P4112 [HEOI2015]最短不公共子串 (DP、后缀自动机)
这其实是道水题... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4032 (luogu)https://www.luog ...
- UOJ #131 BZOJ 4199 luogu P2178【NOI2015】品酒大会 (后缀自动机、树形DP)
UOJ #131 BZOJ 4199 luogu P2178[NOI2015]品酒大会 (后缀自动机.树形DP) 水是水,但是写出了不少问题,因此写一发博客. https://www.luogu.or ...
最新文章
- switch能使用的数据类型有6种
- 在某些输入上删除IE10的“清除字段”X按钮?
- 老焦专栏 | 如何做一个有说服力的方案?
- datagrid里面某一行双击打开代码
- resource.arsc二进制内容解析 之 Dynamic package reference
- MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
- React Fiber源码逐个击破系列-scheduler
- 【CodeForces - 151D】Quantity of Strings (字符串问题,思维推导,有坑)
- MySQL 修改视图
- 3.12 SE11创建锁对象
- 循环依赖 三级缓存解决
- Python 3.7 已上架 Microsoft Store,让你在 Windows 轻松使用 Python
- VMware下CentOS6.8配置GFS文件系统
- Windows10 右键“打开文件所在位置”找不到应用程序
- GDI函数 StretchDIBits,StretchBlt 缩小图片会有黑点的问题解决办法
- 2021-2025年中国阿莫雷德行业市场供需与战略研究报告
- HTML5视频与字幕使用的介绍
- vue实现店铺装修h5用户端实现
- 【报错】python编码问题:UnicodeDecodeError:‘utf-8‘codec can‘t decode byte 0xce in position 52: invalid contin
- 计算机c盘无法扩展,C盘不够大怎么办 怎么扩展C盘容量合并硬盘分区
热门文章
- 【redis】批量删除key
- oracle查看执行最慢与查询次数最多的sql语句
- Weblogic 12c中修改SERVER NAME的方法
- python 删除文件、目录_python实现删除文件与目录的方法
- 快搜浏览器_郑秀晶因腿粗再上热搜:怎么减肥才能不反弹?
- iis 改了php ini不生效,Windows IIS 集成PHP时修改PHP.ini 配置后不生效问题
- linux配置python环境变量_linux添加PYTHONPATH环境变量
- 计算机类大一需要学什么原因,大一新生上大学要不要带电脑?我认为不论什么专业,电脑是必需品...
- oracle开机时间,[20201106]了解oracle数据库启动时间.txt
- mac nginx apache mysql php 一键_Mac 下搭建 apache / nginx+php+mysql