POJ3080 - Blue Jeans(KMP+二分)
题目大意
求N个字符串的最长公共字串
题解
和POJ1226做法一样。。。注意是字典序最小的。。。WA了一次
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 65
char p[MAXN],T[MAXN][MAXN];
int f[MAXN];
void getfail(char *p,int len)
{
int j;
f[0]=j=-1;
for(int i=1;i<len;i++)
{
while(j>=0&&p[j+1]!=p[i]) j=f[j];
if(p[j+1]==p[i]) j++;
f[i]=j;
}
}
bool find(char *s,int len,int n)
{
getfail(s,len);
for(int t=0;t<n;t++)
{
int j=-1,lens=strlen(T[t]);
bool flag=false;
for(int i=0;i<lens;i++)
{
while(j>=0&&s[j+1]!=T[t][i]) j=f[j];
if(s[j+1]==T[t][i]) j++;
if(j+1==len)
{
flag=true;
break;
}
}
if(!flag) return false;
}
return true;
}
int main()
{
int cases;
scanf("%d",&cases);
while(cases--)
{
int n;
scanf("%d",&n);
char s[MAXN],temp[MAXN];
temp[0]='\0';
for(int i=0;i<n;i++) scanf("%s",T[i]);
strcpy(s,T[0]);
int len=strlen(s);
for(int i=0;i<len;i++)
{
char ss[MAXN];
ss[0]='\0';
int l=i,r=len-1;
while(l<=r)
{
int mid=(l+r)>>1;
bool flag=find(s+i,mid-i+1,n);
if(flag)
{
l=mid+1;
strncpy(ss,s+i,mid-i+1);
ss[mid-i+1]='\0';
}
else r=mid-1;
}
if(strlen(ss)>strlen(temp)||(strlen(ss)==strlen(temp)&&strcmp(ss,temp)==-1)) strcpy(temp,ss);
}
if(strlen(temp)>=3)
printf("%s\n",temp);
else printf("no significant commonalities\n");
}
return 0;
}
POJ3080 - Blue Jeans(KMP+二分)的更多相关文章
- POJ3080 Blue Jeans —— 暴力枚举 + KMP / strstr()
题目链接:https://vjudge.net/problem/POJ-3080 Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total ...
- poj3080 Blue Jeans【KMP】【暴力】
Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions:21746 Accepted: 9653 Descri ...
- POJ3080——Blue Jeans(暴力+字符串匹配)
Blue Jeans DescriptionThe Genographic Project is a research partnership between IBM and The National ...
- poj3080 Blue Jeans(暴枚+kmp)
Description The Genographic Project is a research partnership between IBM and The National Geographi ...
- kuangbin专题十六 KMP&&扩展KMP POJ3080 Blue Jeans
The Genographic Project is a research partnership between IBM and The National Geographic Society th ...
- POJ3080 Blue Jeans 题解 KMP算法
题目链接:http://poj.org/problem?id=3080 题目大意:给你N个长度为60的字符串(N<=10),求他们的最长公共子串(长度>=3). 题目分析:KMP字符串匹配 ...
- POJ3080 Blue Jeans
题目链接. 题目大意: 给定n个字符串,找出最长相同且长度大于3的子串,如果存在多个,找出字典序最小的. 分析: 直接枚举(暴搜). 对于s[0]的每一个子串,判断是否在其它n-1个字符串中都存在. ...
- (字符串 KMP)Blue Jeans -- POJ -- 3080:
链接: http://poj.org/problem?id=3080 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...
- POJ 3080 Blue Jeans 找最长公共子串(暴力模拟+KMP匹配)
Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20966 Accepted: 9279 Descr ...
随机推荐
- 素数筛&&欧拉筛
折腾了一晚上很水的数论,整个人都萌萌哒 主要看了欧拉筛和素数筛的O(n)的算法 这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体 ...
- [转载]MongoDB的真正性能
最近开始研究MySQL和MongoDB,发现这方面资料不多.尤其是真正的说到点子上的文章,太少了. 有一些对比测试的文章基本上都是瞎测,测试方法都测到了马腿上,得出的结论基本上都是NoSQL毫无价值 ...
- android TabActivity的局限性 是否还有存在的必要性
TabActivity的局限性 是否还有存在的必要性 其实谷歌有此举动,我们也应该早就想到了,为什么会这么说呢?那就要从TabActivity的原理开始说起了. 做个假定先: 比如我们最外面的Act ...
- 第八章CDC设备
8.1 CDC设备介绍 USB的CDC类是USB通信设备类(Communication Device Class)的简称.CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设 ...
- 给自己加油,一定要学会MFC!
我自己对于没有学会MFC始终耿耿于怀,都什么时代了啊,但是我仍然坚持会去学MFC,因为MFC虽然落后与复杂,但是在Windows平台上仍然是无所不能的(其实Windows平台仍然是唯一可以赚钱的平台, ...
- LinuxShell_variable+if+while
[root@ossec-server mybash]# vim ./hello.sh #! /bin/sh # This is a example bash script echo "Hel ...
- YIi 权限管理和基于角色的访问控制
验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...
- Hello Indigo
Windows Communication Foundation (WCF),formerly code-named “Indigo,” is Microsoft’s platform for Ser ...
- 转载:CEO应向软件工程师学习的7个技能
软件工程师的哪些技能是值得CEO学习的?显然,软件工程师是逻辑的,高效的,注重细节的,有计划的,并且大多数CEO也是如此.但是,软件工程师还有一些更微妙,甚至是令人懊恼的品质,那么CEO是否可以从中学 ...
- bzoj2298
不难发现必然是两个人之间话产生矛盾或自身话有问题很显然,当ai>aj时,若ai<n-bj时i,j两人话矛盾ai<ai<n-bj,这东西有没有数轴上的线段的既视感?我们只要求出做 ...