POJ1226 - Substrings(KMP+二分)
题目大意
给定n个字符串,字符串可逆序可顺序,求它们的最长公共子串
题解
在输入的过程中记录一下最短的那个字符串,然后枚举起点,然后进行二分求出子串末位置,然后再验证是否是公共子串,记录最长的公共子串就是最终答案~~~~时间复杂度为O(N^3*logn)
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXN 105
#define INF 0x3f3f3f3f
char T[MAXN][MAXN];
int f[MAXN];
void getfail(char *p,int len)
{
int j;
f[]=j=-;
for(int i=;i<len;i++)
{
while(j>=&&p[j+]!=p[i]) j=f[j];
if(p[j+]==p[i])j++;
f[i]=j;
}
}
bool find(char *s,int len,int n)
{
getfail(s,len);
for(int i=;i<n;i++)
{
int j=-,lt=strlen(T[i]);
bool flag1=false,flag2=false;
for(int t=;t<lt;t++)
{
while(j>=&&s[j+]!=T[i][t]) j=f[j];
if(s[j+]==T[i][t]) j++;
if(j+==len)
{
flag1=true;
break;
}
}
char ss[MAXN];
strcpy(ss,T[i]);
reverse(ss,ss+lt);
j=-;
for(int t=;t<lt;t++)
{
while(j>=&&s[j+]!=ss[t]) j=f[j];
if(s[j+]==ss[t]) j++;
if(j+==len)
{
flag2=true;
break;
}
}
if(!flag1&&!flag2) return false;
}
return true; }
int main()
{
int cases;
scanf("%d",&cases);
while(cases--)
{
int n,maxlen=-INF,len=INF;
char s[MAXN];
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%s",T[i]);
if(len>strlen(T[i]))
{
len=strlen(T[i]);
strcpy(s,T[i]);
}
}
for(int i=;i<len;i++)
{
int l=i,r=len-,lens=-INF;
while(l<=r)
{
int mid=(l+r)>>;
bool flag=find(s+i,mid-i+,n);
if(flag)
{
l=mid+;
lens=mid-i+;
}
else
r=mid-;
if(lens!=-INF&&lens>maxlen) maxlen=lens;
}
}
if(maxlen!=-INF)
printf("%d\n",maxlen);
else
{
printf("0\n");
}
}
return ;
}
POJ1226 - Substrings(KMP+二分)的更多相关文章
- POJ1226 Substrings(二分+后缀数组)
题意:给n个字符串,求最长的子串,满足它或它的逆置出现在所有的n个字符串中. 把n个字符串及其它们的逆置拼接,中间用不同字符隔开,并记录suffix(i)是属于哪个字符串的: 跑后缀数组计算heigh ...
- POJ1226 Substrings ——后缀数组 or 暴力+strstr()函数 最长公共子串
题目链接:https://vjudge.net/problem/POJ-1226 Substrings Time Limit: 1000MS Memory Limit: 10000K Total ...
- 【bzoj3796】Mushroom追妹纸 Kmp+二分+Hash
题目描述 给出字符串s1.s2.s3,找出一个字符串w,满足: 1.w是s1的子串: 2.w是s2的子串: 3.s3不是w的子串. 4.w的长度应尽可能大 求w的最大长度. 输入 输入有三行,第一行为 ...
- 【bzoj3796】Mushroom追妹纸 hash/sa+kmp+二分
Description Mushroom最近看上了一个漂亮妹纸.他选择一种非常经典的手段来表达自己的心意--写情书.考虑到自己的表达能力,Mushroom决定不手写情书.他从网上找到了两篇极佳的情书, ...
- HDU4763-Theme Section(KMP+二分)
Theme Section Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- POJ1226:Substrings(后缀数组)
Description You are given a number of case-sensitive strings of alphabetic characters, find the larg ...
- POJ3080 - Blue Jeans(KMP+二分)
题目大意 求N个字符串的最长公共字串 题解 和POJ1226做法一样...注意是字典序最小的...WA了一次 代码: #include <iostream> #include <cs ...
- hdu 1238 Substrings(kmp+暴力枚举)
Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...
- Substrings kmp
Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...
随机推荐
- python制作安装包(setup.py)
1.制作setup.py from distutils.core import setup setup(name='Myblog', version='1.0', description='My Bl ...
- 【Druid】 阿里巴巴推出的国产数据库连接池com.alibaba.druid.pool.DruidDataSource
阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好 简单使用介绍 Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息 ...
- unity的旋转
绕着一个点旋转 : transform.RotateAround(Vector3.zero, Vector3.up, speed* Time.deltaTime ); 第一个参数,点的位置.第二个参数 ...
- cocos2dx输出信息重定向到控制台
重定向输出到控制台,方便调试,代码: // uncomment below line, open debug console #define USE_WIN32_CONSOLE int APIENTR ...
- new reader
BufferedReader bufferedReader = new BufferedReader( new StringReader(charset.decode(inBuffer).toStri ...
- bzoj 3672: [Noi2014]购票 树链剖分+维护凸包
3672: [Noi2014]购票 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 480 Solved: 212[Submit][Status][D ...
- unity 引用 移动mm 支付sdk
原地址:http://blog.csdn.net/u012085988/article/details/17531005 资源下载:http://download.csdn.net/detail/u0 ...
- maven 项目编译时候提示:Error building POM (may not be this project's POM).
编译时候提示Error building POM (may not be this project's POM)的错误,具体信息如下: [0] 'dependencies.dependency.ver ...
- cocos2d-x mac or windows eclipse android ------ Eclipse工程里面还会有许多警告
由于公司的游戏项目比较特殊, coco2d-x 的 ios 和 android 的游戏 代码 没有采用 共享目录的开发方式.所以android 内的 c++ 游戏代码全部放在 jni 下, ...
- asp.net DropDownList无刷新ajax二级联动实现详细过程
只适合新手制作DropDownList无刷新ajax二级联动效果: 数据库实现,添加两表如图:表1,pingpai,表2,type,具体数据库实现看自己的理解: //页面主要代码: <asp:S ...