Description

 
       给出几个由小写字母构成的单词,求它们最长的公共子串的长度。
任务:
l        读入单词
l        计算最长公共子串的长度
l        输出结果
 

Input

 
文件的第一行是整数 n,1<=n<=5,表示单词的数量。接下来n行每行一个单词,只由小写字母组成,单词的长度至少为1,最大为2000。
 

Output

仅一行,一个整数,最长公共子串的长度。
 

Sample Input

3
abcb
bca
acbc

Sample Output

 
同poj3450,这里多一种SAM做法
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 200002
using namespace std; struct po{
int t[],f,l;
po(){
f=-;l=;
}
}t[MN];
int num=,n,la=,T,MMH,p,m;
char s[];
int mmh[MN],mmh_[MN];
inline void add(int x){
int p=++num,o,ne;
t[p].l=t[la].l+;
while (la!=-&&!t[la].t[x]) t[la].t[x]=p,la=t[la].f;
if (la==-) t[p].f=;else{
o=t[la].t[x];
if (t[o].l==t[la].l+) t[p].f=o;else{
ne=++num;
t[ne]=t[o];
t[ne].l=t[la].l+;
t[o].f=t[p].f=ne;
while (la!=-&&t[la].t[x]==o) t[la].t[x]=ne,la=t[la].f;
}
}
la=p;
}
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
int main(){
int i,j,k;
scanf("%d",&T);
scanf("%s",s);n=strlen(s);T--;
for (i=;i<n;i++) add(s[i]-'a');
memset(mmh,,sizeof(mmh));
while (T--){
memset(mmh_,,sizeof(mmh_));
scanf("%s",s);
n=strlen(s);
p=;m=;
for (i=;i<n;i++)
if (t[p].t[s[i]-'a']){
p=t[p].t[s[i]-'a'];mmh_[p]=max(mmh_[p],++m);
for (k=p;t[k].f!=-;k=t[k].f) mmh_[t[k].f]=max(mmh_[t[k].f],min(mmh_[k],t[t[k].f].l));
}else{
while (p!=-&&!t[p].t[s[i]-'a']) p=t[p].f;
if (p!=-) m=mmh_[p]+,p=t[p].t[s[i]-'a'],mmh_[p]=max(mmh_[p],m);else p=,m=;
for (k=p;t[k].f!=-;k=t[k].f) mmh_[t[k].f]=max(mmh_[t[k].f],min(mmh_[k],t[t[k].f].l));
}
for (i=;i<=num;i++) mmh[i]=min(mmh[i],mmh_[i]);
}
MMH=;
for (i=;i<=num;i++) MMH=max(MMH,mmh[i]);
printf("%d\n",MMH);
}

24340 kb 356 ms C++/Edit 1804 B

bzoj 2946的更多相关文章

  1. BZOJ 2946: [Poi2000]公共串

    2946: [Poi2000]公共串 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 342[Submit][Status][D ...

  2. BZOJ 2946: [Poi2000]公共串( 后缀自动机 )

    一个串建后缀自动机, 其他串在上面跑, 然后用当前串跑的去更新全部 ------------------------------------------------------------------ ...

  3. 【BZOJ 2946】 2946: [Poi2000]公共串 (SAM)

    2946: [Poi2000]公共串 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1063  Solved: 469 Description      ...

  4. bzoj 2946 [Poi2000]公共串——后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...

  5. bzoj 2946 公共串 —— 后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 建出 n-1 个后缀自动机一起跑呗. 代码如下: #include<cstdio ...

  6. BZOJ 2946 POI2000 公共串 后缀自动机(多串最长公共子串)

    题意概述:给出N个字符串,每个串的长度<=2000(雾...可能是当年的年代太久远机子太差了),问这N个字符串的最长公共子串长度为多少.(N<=5) 抛开数据结构,先想想朴素做法. 设计一 ...

  7. BZOJ 2946 [Poi2000]公共串 ——后缀自动机

    任意选择一个串作为模式串,构建出后缀自动机. 然后用其他的串在后缀自动机上跑匹配. 然后就到了理解后缀自动机性质的时候. 在某一个节点的最大值是可以沿着parent树上传的. 然后用dp[i][j]表 ...

  8. bzoj 2946: [Poi2000]公共串【SAM】

    对第一个串建SAM,把剩下的串在上面跑,每次跑一个串的时候在SAM的端点上记录匹配到这的最大长度,然后对这些串跑的结果取min,然后从这些节点的min中取max就是答案 注意在一个点更新后它的祖先也会 ...

  9. BZOJ 2946 SA/SAM

    思路: 1. 二分+后缀数组 2.SAM //By SiriusRen #include <cstdio> #include <cstring> #include <al ...

随机推荐

  1. Node之Express服务器启动安装与配置

    首先安装express-generator cnpm i -g express-generator 使用express --version查看express版本 生成express服务 express ...

  2. [转]winform 自动伸缩控件xpandercontrols 使用说明

    链接地址:http://blog.sina.com.cn/s/blog_b5b004920101f5h3.html

  3. 使用Libmicrohttpd搭建内嵌(本地)服务器

    Libmicrohttpd简介 GNU Libmicrohttpd是一个用来在项目中内嵌http服务器的C语言库,它具有以下几个非常鲜明的特点: C语言库,小而快. API非常简单,且都是可重入的. ...

  4. Mysql数据库重要知识点(知了堂学习心得)

    Mysql数据库知识点 1.管理数据库语句: 使用数据库: use test; 添加数据库: create database 数据库名; create database test; 修改数据库: al ...

  5. Docker安装入门 -- 应用镜像

    Docker安装入门 -- 应用镜像 WordPress  1.docker build -t csphere/wordpress:4.2 .  2.docker run -d -p 80:80 -- ...

  6. MySQL小抄

    以下是MySQL5.7中的一些tips&tricks(持续更新中): Use of an unqualified * with other items in the select list m ...

  7. 在QComboBox的基础上实现复选功能

    这个是最近的一个项目上需要实现的功能.要求如下: 下拉列表的项目可以多选 显示框不能编辑 所选中的项目在显示框中出现 下面根据网上的提示代码(参照博客 一去二三里),主要实现如下代码(与参照略有不同) ...

  8. vim编辑器的使用技巧

    vim(vi)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是“visual interface”的缩 ...

  9. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法

    前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...

  10. SSH实战OA 11:BBS模块

    <SSH实战OA>系列博客的系统管理.权限管理等内容后面再补上吧,先继续第三个模块:网上交流模块.网上交流主要做两个需求:论坛管理和论坛. BBS的一些基本术语: 板块:也叫做" ...