bzoj2946

时间:2022-09-27 00:10:20

题解:

和poj1226差不多

把翻转去掉

然后不要忘记开大数组和二分的上限答案

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=;
char str[N];
int r[N],len,n,t,Index[N],Rank[N],height[N],sa[N],wa[N],wb[N],wv[N],WS[N];
int cmp(int *r,int a,int b,int l)
{
return r[a]==r[b]&&r[a+l]==r[b+l];
}
void da(int *r,int *sa,int n,int m)
{
int p,*x=wa,*y=wb,*t;
for (int i=;i<m;i++)WS[i]=;
for (int i=;i<n;i++)WS[x[i]=r[i]]++;
for (int i=;i<m;i++)WS[i]+=WS[i-];
for (int i=n-;i>=;i--)sa[--WS[x[i]]]=i;
for (int j=,p=;p<n;j*=,m=p)
{
p=;
for (int i=n-j;i<n;i++)y[p++]=i;
for (int i=;i<n;i++)
if (sa[i]>=j)y[p++]=sa[i]-j;
for (int i=;i<n;i++)wv[i]=x[y[i]];
for (int i=;i<m;i++)WS[i]=;
for (int i=;i<n;i++)WS[wv[i]]++;
for (int i=;i<m;i++)WS[i]+=WS[i-];
for (int i=n-;i>=;i--)sa[--WS[wv[i]]]=y[i];
t=x,x=y,y=t,p=,x[sa[]]=;
for (int i=;i<n;i++)
x[sa[i]]=cmp(y,sa[i-],sa[i],j)?p-:p++;
}
return;
}
void calheight(int *r,int *sa,int n)
{
int k=;
for (int i=;i<=n;i++)Rank[sa[i]]=i;
for (int i=;i<n;height[Rank[i++]]=k)
{
k?k--:;
for (int j=sa[Rank[i]-];r[i+k]==r[j+k];k++);
}
return;
}
int check(int x)
{
set<int>se;
for (int i=;i<len;i++)
{
if (height[i]>=x)
{
se.insert(Index[sa[i]]);
se.insert(Index[sa[i-]]);
}
else
{
if (se.size()==n)return ;
se.clear();
}
}
if (se.size()==n)return ;
return false;
}
void solve()
{
int L=,R=,ans=;
while (R>=L)
{
int mid=(L+R)/;
if (check(mid))
{
ans=mid;
L=mid+;
}
else R=mid-;
}
printf("%d\n",ans);
}
int main()
{
scanf("%d",&n);
for (int i=,val=;i<=n;i++)
{
scanf("%s",&str);
for (int j=;j<strlen(str);j++)
{
Index[len]=i;
r[len++]=(str[j]-'a'+*n+);
}
Index[len]=i;
r[len++]=val++;
}
da(r,sa,len,);
calheight(r,sa,len-);
solve();
return ;
}

bzoj2946的更多相关文章

  1. 【BZOJ2946】公共串(后缀数组)

    [BZOJ2946]公共串(后缀数组) 题面 权限题... 只有CJOJ题面啦 Description 给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: 读入单词,计算最长公共子串的 ...

  2. 【BZOJ2946】&lbrack;Poi2000&rsqb;公共串 后缀数组&plus;二分

    [BZOJ2946][Poi2000]公共串 Description        给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l        读入单词 l        计 ...

  3. &lbrack;BZOJ2946&rsqb;&lbrack;Poi2000&rsqb;公共串解题报告&vert;后缀自动机

    鉴于SAM要简洁一些...于是又写了一遍这题... 不过很好呢又学到了一些新的东西... 这里是用SA做这道题的方法 首先还是和两个字符串的一样,为第一个字符串建SAM 然后每一个字符串再在这个SAM ...

  4. &lbrack;BZOJ2946&rsqb; &lbrack;Poi2000&rsqb;公共串解题报告&vert;后缀数组

    给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 单词个数<=5,每个单词长度<=2000     尽管最近在学的是SAM...但是看到这个题还是忍不住想写SA... (其实是不 ...

  5. &lbrack;bzoj2946&rsqb;&lbrack;Poi2000&rsqb;公共串&lowbar;后缀数组&lowbar;二分

    公共串 bzoj-2946 Poi-2000 题目大意:给定$n$个字符串,求他们的最长公共子串. 注释:$1\le n\le 5$,$1\le minlen<maxlen\le 2000$. ...

  6. SPOJ1812&colon; LCS2 - Longest Common Substring II &amp&semi; BZOJ2946&colon; &lbrack;Poi2000&rsqb;公共串

    [传送门:SPOJ1811&BZOJ2946] 简要题意: 给出若干个字符串,求出这些字符串的最长公共子串 题解: 后缀自动机 这两道题的区别只是在于一道给出了字符串个数,一个没给,不过也差不 ...

  7. bzoj2946&colon; &lbrack;Poi2000&rsqb;公共串

    SAM处女题qwq #include <iostream> #include <cstdio> #include <cstring> #include <cm ...

  8. bzoj2946 &lbrack;Poi2000&rsqb;公共串(SA,SAM)

    [题意] 多串求LCS.   [思路]   主要是想找一下SAM的优越感 :) velui good 后缀数组划分height需要注意不少细节 <_<,然后不停debug   [代码]   ...

  9. Bzoj2946:&lbrack;POI2000&rsqb; 最长公共子串

    题面 求多个串的最长公共子串 Sol 套路,拼在一起,二分答案+后缀数组判定 把大于答案的\(height\)分组,然后计算出一个组内是否有所有串的后缀 由于串只有\(5\)个开个桶就好了 # inc ...

  10. BZOJ2946 &lbrack;Poi2000&rsqb;公共串&lpar;后缀自动机&rpar;

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

随机推荐

  1. python print输出unicode字符

    命令行提示符下,python print输出unicode字符时出现以下 UnicodeEncodeError: 'gbk' codec can't encode character '\u30fb ...

  2. bzoj 1109 &lbrack;POI2007&rsqb;堆积木Klo(LIS)

    [题意] n个数的序列,删除一个数后序列左移,求最后满足i==a[i]的最大个数. [思路] 设最终得到a[i]==i的序列为s,则s应满足: i<j,a[i]<a[j],i-a[i]&l ...

  3. Eclipse启动时报需要安装&quot&semi;Java SE 6 Runtime&quot&semi;致无法启动解决方案

    今天心血来潮,把MBP升级到了osx mavericks,然后启动了闲置好久的eclipse,启动时居然报错了: 若要打开Eclipse.app,您需要Java SE 6 runtime,您想现在安装 ...

  4. 百度,人人,新浪,腾讯等分享Js代码

    <!-- Baidu Button BEGIN -->                        <div id="bdshare" class=" ...

  5. HDU 1312&colon;Red and Black(DFS搜索)

      HDU 1312:Red and Black Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & ...

  6. JSON无限折叠菜单

    JSON无限折叠菜单编写 2013-12-14 22:37 by 龙恩0707, 103 阅读, 1 评论, 收藏, 编辑 最近看了一篇关于JSON无限折叠菜单的文章 感觉写的不错,也研究了下代码,所 ...

  7. Google 怎么搜索

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:崔凯 链接:http://www.zhihu.com/question/20161362/answer/14180620 ...

  8. python函数的闭包

    ---恢复内容开始--- python允许有内部函数,也就是说可以在函数内部再定义一个函数,这就会产生变量的访问问题,类似与java的内部类,在java里内部类可以直接访问外部类的成员变量和方法,不管 ...

  9. C 标准库头文件

    头文件 说明 头文件 说明 <assert.h> 条件编译宏,将参数与零比较 <complex.h> (C99 起) 复数运算 <ctype.h> 用来确定包含于字 ...

  10. 接口约束的另一种方法:Class类的isAssignableFrom

    Class类的isAssignableFrom是个不常用的方法,感觉这个方法的名字取得不是很好,所以有必要在此解析一下,以免在看源码时产生歧义,这个方法的签名如下: public native boo ...