跟3294比较类似,但是不需要输出具体的串,比较简单,只要把串反转连接上去解法就一样了。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e5+9;
int r[maxn];
int c[maxn];
char a[1111];
int n,m;
int *rank,height[maxn],sa[maxn];
int wx[maxn],wy[maxn],cnt[maxn];
inline bool 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 n,int m)
{
r[n+1]=0;
int i,l,p,*x=wx,*y=wy,*t;
memset(cnt,0,sizeof(int)*(m+1));
for(int i=1;i<=n;i++) cnt[x[i]=r[i]]++;
for(int i=1;i<=m;i++) cnt[i]+=cnt[i-1];
for(int i=n;i>=1;i--) sa[cnt[x[i]]--]=i;
for(l=1,p=1;p<n;l<<=1,m=p)
{
for(p=1,i=n-l+1;i<=n;i++) y[p++]=i;
for(i=1;i<=n;i++)
if(sa[i]>l)
y[p++]=sa[i]-l;
memset(cnt,0,sizeof(int)*(m+1));
for(i=1;i<=n;i++) cnt[x[i]]++;
for(i=1;i<=m;i++) cnt[i]+=cnt[i-1];
for(i=n;i>=1;i--) sa[cnt[x[y[i]]]--]=y[i];
for(t=x,x=y,y=t,p=1,x[sa[1]]=1,i=2;i<=n;i++)
x[sa[i]]=cmp(y,sa[i-1],sa[i],l)?p:++p;
}
rank=x;
int j,k=0;
for(i=1;i<=n;height[rank[i++]]=k)
for(k?k--:0,j=sa[rank[i]-1];r[i+k]==r[j+k];k++);
return;
} bool fla[111];
bool chk(int ret)
{
for(int i=2;i<=n;i++)
if(height[i]>=ret)
{
int j=i+1;
while(height[j]>=ret) j++;
j--;
memset(fla,0,sizeof(fla));
for(int k=i-1;k<=j;k++)
fla[c[sa[k]]]=1;
int cnt=0;
for(int k=1;k<=m;k++)
cnt+=fla[k];
if(cnt==m) return true;
}
return false;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
n=0;
int ret;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%s",a+1);
ret=strlen(a+1);
for(int j=1;j<=ret;j++)
r[n+j]=a[j];
n+=ret;
r[++n]=280+i*2-1;
for(int j=1;j<=ret;j++)
r[n+(ret-j+1)]=a[j];
n+=ret;
r[++n]=280+i*2;
for(int j=n-ret-ret-2+1;j<=n;j++)
c[j]=i;
}
da(r,n,500);
int st=0,ed=111,mid;
while(st<ed)
{
mid=st+ed+1>>1;
if(chk(mid)) st=mid;
else ed=mid-1;
}
printf("%d\n",st);
}
return 0;
}

poj 1226的更多相关文章

  1. POJ - 3294~Relevant Phrases of Annihilation SPOJ - PHRASES~Substrings POJ - 1226~POJ - 3450 ~ POJ - 3080 (后缀数组求解多个串的公共字串问题)

    多个字符串的相关问题 这类问题的一个常用做法是,先将所有的字符串连接起来, 然后求后缀数组 和 height 数组,再利用 height 数组进行求解. 这中间可能需要二分答案. POJ - 3294 ...

  2. POJ - 1226 Substrings (后缀数组)

    传送门:POJ - 1226 这个题跟POJ - 3294  和POJ - 3450 都是一样的思路,一种题型. POJ - 3294的题解可以见:https://www.cnblogs.com/li ...

  3. POJ 1226 后缀数组

    题目链接:http://poj.org/problem?id=1226 题意:给定n个字符串[只含大小写字母],求一个字符串要求在n个串或者他们翻转后的串的出现过.输出满足要求的字符串的长度 思路:根 ...

  4. OpenJudge/Poj 1226 Substrings

    1.链接地址: http://bailian.openjudge.cn/practice/1226/ http://poj.org/problem?id=1226 2.题目: 总时间限制: 1000m ...

  5. POJ 1226 Substrings(后缀数组+二分答案)

    [题目链接] http://poj.org/problem?id=1226 [题目大意] 求在每个给出字符串中出现的最长子串的长度,字符串在出现的时候可以是倒置的. [题解] 我们将每个字符串倒置,用 ...

  6. POJ 1226 Substrings

    Substrings Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: ...

  7. 【POJ 1226】Substrings

    [链接]h在这里写链接 [题意] 给你n个字符串. 让你找一个字符串s. 设s'为这个字符串的逆序. 要求s或者s'在每个字符串里都能够找得到. 并且要求s的长度最长. 求出这个最长的串的长度. [题 ...

  8. poj 3261 后缀数组 找反复出现k次的子串(子串能够重叠)

    题目:http://poj.org/problem?id=3261 仍然是后缀数组的典型应用----后缀数组+lcp+二分 做的蛮顺的,1A 可是大部分时间是在调试代码.由于模板的全局变量用混了,而自 ...

  9. KUANGBIN带你飞

    KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题    //201 ...

随机推荐

  1. jdk .tar.gz 包安装 inAction

    方法参考于http://blog.sina.com.cn/s/blog_81631744010137iy.html, 多谢博主分享,此处仅作为个人学习笔记. 首先将*.tar.gz解压 tar -xz ...

  2. 将yyyyMMdd HH:mm:ss格式的时间转换成时间类型

    DateTime.ParseExact(gmt_withdrawal, "yyyyMMddHHmmss", System.Globalization.CultureInfo.Cur ...

  3. Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER

    Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER 在微博上看到的,读完还是有些收获的,首先是端正做research的态度. 我是从这里看到的:http://www.vjianke ...

  4. 关于ARP欺骗与MITM(中间人攻击)的一些笔记( 二 )

    一直没有折腾啥东西,直到最近kali Linux发布,才回想起应该更新博客了….. 再次说明,这些技术并不是本人原创的,而是以前记录在Evernote的旧内容(排版不是很好,请谅解),本文是继关于AR ...

  5. Android 小知识点(持续更新)

    ①文件保存默认是private权限. ②在layout的xml文件中onClick的方法中包含一个View类型的参数 ③获取项目下files路径:Context.getFilesDir(); ④获取项 ...

  6. 标准MD5加密算法

    标准MD5加密算法: public class Md5 { public static String getMd5(String s) { char hexDigits[] = { '0', '1', ...

  7. 《attodiskbenchmarks-v2.47》说明文件

    对于用电脑方便且不喜欢在手机上乱装软件的我来说,很喜欢,特此整理,并在miui首发. 一.软件介绍 ATTO Disk Benchmark是一款电脑端使用的专业测速软件,该软件非常小巧,但却很专业,是 ...

  8. ruby hashtable散列表

    dict={'cat'=>'abc','dog'=>'def'}puts dict.size dict.keys返回所有的key, values返回所有的value. 删除: dict.d ...

  9. django 常用命令

    django 常用命令,备忘: django-admin.py startproject test 创建一个项目名叫test的项目 python manage.py startapp app 创建一个 ...

  10. dom4j中 selectSingleNode 或selectNodes获取不到节点的原因总结 (转)

    没想到搞个dom4j会出这么多怪错.. 最近在研究XBRL GL的有关内容,在项目中要求吧XBRL GL导入到11179注册库中,根据11179建立数据库,然后从XBRL GL分类标准中导入数据到数据 ...