SPOJ 1812 LCS2
题解:
和上一题差不多
每个点记录前面的到这个点的最大值
初值赋为len[i]
然后注意要用子节点更新父节点
代码:
- #include <bits/stdc++.h>
- #define ll long long
- #define rint register int
- #define rep(i,h,t) for (rint i=h;i<=t;i++)
- #define dep(i,t,h) for (rint i=t;i>=h;i--)
- #define me(x) memset(x,0,sizeof(x))
- using namespace std;
- const int N=3e6;
- const int INF=1e9;
- char s[N];
- int size[N],len[N],ch[N][];
- int lst=,node=,t[N],a[N],fa[N],ans[N],ans2[N],num[N];
- void extend(int c)
- {
- int f=lst,p=++node; lst=p;
- len[p]=len[f]+; size[p]=;
- while (f&&!ch[f][c]) ch[f][c]=p,f=fa[f];
- if (!f) { fa[p]=; return;};
- int x=ch[f][c],y=++node;
- if (len[f]+==len[x]) {fa[p]=x; node--;return;};
- len[y]=len[f]+; fa[y]=fa[x]; fa[x]=fa[p]=y;
- memcpy(ch[y],ch[x],sizeof(ch[x]));
- while (f&&ch[f][c]==x) ch[f][c]=y,f=fa[f];
- }
- void js()
- {
- int l=strlen(s),now=,t=;
- rep(i,,l)
- {
- int x=s[i-]-'a';
- if (ch[now][x]) now=ch[now][x],++t;
- else
- {
- while (now&&!ch[now][x]) now=fa[now];
- if (!now) now=,t=;
- else t=len[now]+,now=ch[now][x];
- }
- ans[now]=max(ans[now],t);
- }
- }
- int main()
- {
- freopen("1.in","r",stdin);
- freopen("1.out","w",stdout);
- ios::sync_with_stdio(false);
- cin>>s;
- int l=strlen(s);
- rep(i,,l) extend(s[i-]-'a');
- rep(i,,node) t[len[i]]++;
- rep(i,,node) t[i]+=t[i-];
- rep(i,,node) a[t[len[i]]--]=i;
- rep(i,,N-) ans2[i]=len[i];
- while (cin>>s)
- {
- me(ans);
- js();
- dep(i,node,)
- {
- int x=a[i];
- ans2[x]=min(ans2[x],ans[x]);
- ans[fa[x]]=max(ans[fa[x]],ans[x]);
- }
- }
- int maxn=;
- rep(i,,node) maxn=max(maxn,ans2[i]);
- cout<<maxn<<endl;
- return ;
- }
SPOJ 1812 LCS2的更多相关文章
- spoj 1812 LCS2 - Longest Common Substring II (后缀自己主动机)
spoj 1812 LCS2 - Longest Common Substring II 题意: 给出最多n个字符串A[1], ..., A[n], 求这n个字符串的最长公共子串. 限制: 1 < ...
- spoj 1812 LCS2(SAM+DP)
[题目链接] http://www.spoj.com/problems/LCS2/en/ [题意] 求若干个串的最长公共子串. [思路] SAM+DP 先拿个串建个SAM,然后用后面的串匹配,每次将所 ...
- SPOJ 1812 LCS2 [后缀自动机 DP]
题意: 求多个串<=10的最长连续子串 一个串建SAM,然后其他串在上面走 每个状态记录所有串在这个状态的公共子串的最小值 一个串在上面走的时候记录与每个状态公共子串的最大值,注意出现次数向父亲 ...
- SPOJ 1812 LCS2 - Longest Common Substring II
思路 后缀自动机求多串的最长公共子串 对第一个建出后缀自动机,其他的在SAM上匹配,更新到一个节点的匹配长度最大值即可,最后对所有最大值取min得到一个节点的答案,对所有节点答案求max即可 然后注意 ...
- SPOJ.1812.LCS2(后缀自动机)
题目链接 \(Description\) 求最多10个串的LCS(最长公共子序列). \(Solution\) 类比上题,对一个串建SAM,我们可以逐串地求出其在每个节点所能匹配的最大长度mx[i]. ...
- 【刷题】SPOJ 1812 LCS2 - Longest Common Substring II
A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is the s ...
- SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机、状压DP)
手动博客搬家: 本文发表于20181217 23:54:35, 原地址https://blog.csdn.net/suncongbo/article/details/85058680 人生第一道后缀自 ...
- spoj 1812 lcsII (后缀自动机)
spoj 1812 lcsII (后缀自动机) 题意:求多个串的lcs,最多10个串,每个串最长10w 解题思路:后缀自动机.先建好第一个串的sam,然后后面的串拿上去跑(这个过程同前一题).sam上 ...
- SPOJ 1812 Longest Common Substring II(后缀自动机)(LCS2)
A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is the s ...
随机推荐
- requests库入门04-http基本认证
因为后续样例中GitHub都需要提供认证,所以先写关于基本认证的 http的请求中,有一些请求是需要通过授权认证之后才会响应,授权认证就是检查用户名和密码的过程.http有一个基本认证方式,在认证的过 ...
- linux 系统进程理解
1.为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行. 不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样 ...
- 008_falcon磁盘io计算方法
一.falcon磁盘IO告警计算方法 (1)线上告警示例 [falcon]环境: prod 时间: 2018-11-10 22:29 共1条 [#主机磁盘io过高(appid)]主机hostname磁 ...
- 029_mount bind挂载
一. 由于公司的配置标准并不统一,交付的磁盘挂载的路径不是想要的路径,但是 1./home目录下有很重要的堡垒机登录的相关文件,还不能卸载 2.我通过pts/0登录的,这个文件描述符也是在/home目 ...
- UDP/TCP拾遗
1.UDP的特点 (1)UDP 是无连接的,即发送数据之前不需要建立连接. (2)UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制. (3)UDP 是面向报文的.UDP 没有拥塞控制 ...
- ls 命令
命令: ls 对应英文: list 作用: 查看当前文件夹下的内容 选项: -a 查看隐藏文件, 文件名前带 . 号的文件 -l 以详细列表形式显示 -h 人性化方式显示文件大小(注:-h必须和-l同 ...
- 解决layui选中项下一页清空问题
项目中遇到给用户在所有产品中匹配一部分产品.用layui 第一页选好之后到第二页再选,等回到第一页时之前选择的都没了,解决这个问题的办法如下: //勾选的产品id集合 var chooseAdids ...
- Spring Cloud源码分析(四)Zuul:核心过滤器
通过之前发布的<Spring Cloud构建微服务架构(五)服务网关>一文,相信大家对于Spring Cloud Zuul已经有了一个基础的认识.通过前文的介绍,我们对于Zuul的第一印象 ...
- css 样式 记录
/* Track */::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); -webkit-bo ...
- Android&Java面试题大全—金九银十面试必备
声明本文由作者:Man不经心授权转载,转载请联系原文作者原文链接:https://www.jianshu.com/p/375ad14096b3, 类加载过程 Java 中类加载分为 3 个步骤:加载. ...