bzoj 2946
Description
Input
Output
Sample Input
abcb
bca
acbc
Sample Output
#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的更多相关文章
- BZOJ 2946: [Poi2000]公共串
2946: [Poi2000]公共串 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 787 Solved: 342[Submit][Status][D ...
- BZOJ 2946: [Poi2000]公共串( 后缀自动机 )
一个串建后缀自动机, 其他串在上面跑, 然后用当前串跑的去更新全部 ------------------------------------------------------------------ ...
- 【BZOJ 2946】 2946: [Poi2000]公共串 (SAM)
2946: [Poi2000]公共串 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 1063 Solved: 469 Description ...
- bzoj 2946 [Poi2000]公共串——后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...
- bzoj 2946 公共串 —— 后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 建出 n-1 个后缀自动机一起跑呗. 代码如下: #include<cstdio ...
- BZOJ 2946 POI2000 公共串 后缀自动机(多串最长公共子串)
题意概述:给出N个字符串,每个串的长度<=2000(雾...可能是当年的年代太久远机子太差了),问这N个字符串的最长公共子串长度为多少.(N<=5) 抛开数据结构,先想想朴素做法. 设计一 ...
- BZOJ 2946 [Poi2000]公共串 ——后缀自动机
任意选择一个串作为模式串,构建出后缀自动机. 然后用其他的串在后缀自动机上跑匹配. 然后就到了理解后缀自动机性质的时候. 在某一个节点的最大值是可以沿着parent树上传的. 然后用dp[i][j]表 ...
- bzoj 2946: [Poi2000]公共串【SAM】
对第一个串建SAM,把剩下的串在上面跑,每次跑一个串的时候在SAM的端点上记录匹配到这的最大长度,然后对这些串跑的结果取min,然后从这些节点的min中取max就是答案 注意在一个点更新后它的祖先也会 ...
- BZOJ 2946 SA/SAM
思路: 1. 二分+后缀数组 2.SAM //By SiriusRen #include <cstdio> #include <cstring> #include <al ...
随机推荐
- 【python】字符串
>>> str1="welcom to China">>> str1[2:4]'lc'>>> str1[7]'t'>&g ...
- iOS 通知的变化ios9-10,新功能展示
二.新功能展示 1 使用 /iOS通知新功能玩法 2. 全面 iOS10里的通知与推送详情 一.变化 四.Notification(通知) 自从Notification被引入之后,苹果就不断的 ...
- KD树小结
很久之前我就想过怎么快速在二维平面上查找一个区域的信息,思考许久无果,只能想到几种优秀一点的暴力. Kd树就是干上面那件事的. 别的不多说,赶紧把自己的理解写下来,免得凉了. KD树的组成 以维护k维 ...
- Linux(CentOS6.5)下编译安装Nginx1.10.1
首先在特权账号(root)下安装编译时依赖项: yum install gcc gcc-c++ perl -y 首先以非特权账号(本文以账号comex为例)登陆OS: 进入data目录下载相关安装 ...
- 最近提交一个mysql5.7的bug,提醒自己以后注意写SQL要规范
最近帮朋友提交一个mysql5.7的bug , oracle mysql 的大神还回复我 , 以后注意书写sql规范 , 潜台词是不是不要给他们增加工作量 https://bugs.mysql.com ...
- jquery中this和event.target的区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python实现散列表的直接寻址法
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数, 将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速 ...
- [Android游戏开发]游戏框架的搭建
通常情况下,游戏开发的基本框架中,一般包括以下模块: 窗口管理(Window management):该模块负责在Android平台上创建.运行.暂停.恢复游戏界面等功能. 输入模块(Input):该 ...
- swiper轮播问题之二:默认显示3张图片,中间显示全部两边显示部分
其二:项目遇到比较有点要求的轮播图,默认显示3张图片,中间显示全部,两边显示部分.如图: 网上找了也没有找到合适的,最后经过自己摸索写了出来,贴出代码分享给大家. CSS .swipe ...
- Python的*args与**kwargs
当Python的函数的参数不确定时,可以使用*args与**kwargs来指代不定数量的参数. 两者的区别是,*args是个tuple(元组),而**kwargs是个dict(字典). 先通过代码来验 ...