本题与1226,3450基本一样!!!!!!!!!!!!不解释,详细可以看1226的结题报告
#include<iostream>
using namespace std;
#define max 100
int next[max];
void prekmp(char aa[])
{
int j=-1;
next[0]=-1;
int len=strlen(aa);
for(int i=1;i<len;i++)
{
while(j>=0&&aa[i]!=aa[j+1])
j=next[j];
if(aa[i]==aa[j+1])
j++;
next[i]=j;
}
}
int kmp(char ss[],char a[])
{
int len=strlen(a);
int lens=strlen(ss);
int j=-1;
for(int i=0;i<len;i++)
{
while(j>=0&&ss[j+1]!=a[i])
j=next[j];
if(ss[j+1]==a[i])
j++;
if(j==lens-1)
return 1;
}
return 0;
}
int main()
{
char a[15][max];
char ta[max],tb[max];
int t,n;
char tc[max];
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%d",&n);
int temp=1;
int len=0x7FFFFFFF;
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]);
int tlen=strlen(a[i]);
if(tlen<len)//选出最小的,优化1
{
temp=i;
len=tlen;
}
}
int sign=0,sign1=0;
int i;
for( i=len;i>=1;i--)
{
for(int k=0;k<60;k++)
tc[k]='z';
tc[60]='\0';
for(int j=0;j+i-1<len;j++)
{
int cou=0;
for(int k=j;k<=j+i-1;k++)
ta[cou++]=a[temp][k];
ta[cou]='\0';
cou=0;
prekmp(ta);//这个我已开始放在kmp里了,发现很浪费时间啊,优化2
for(int k=1;k<=n;k++)
{
if(k!=temp)
{
if(kmp(ta,a[k]))
{
cou++;
}
else
break;//这个优化很重要啊 优化3
}
}
if(cou==n-2+1)
{
sign=1;
sign1=1;
if(strcmp(ta,tc)<0)
strcpy(tc,ta);
}
}
if(sign==1)
{
int tr=strlen(tc);
if(tr<3)
printf("no significant commonalities\n");
else
printf("%s\n",tc);
break;
}
}
if(sign1==0)
printf("no significant commonalities\n");
}
}
return 0;
}

poj 3080 Blue Jeans kmp+枚举相关推荐

  1. POJ 3080 Blue Jeans (KMP)

    链接:http://poj.org/problem?id=3080 题目: Description The Genographic Project is a research partnership ...

  2. poj 3080 Blue Jeans

    #include <iostream> //KMP+枚举#include<string>using namespace std;#define len 60char str[1 ...

  3. POJ - 3080 Blue Jeans(暴力+KMP)

    题目链接:点击查看 题目大意:给出n组长度为60的字符串,问这n组中最长的公共连续子串是什么,若有多个不同的最长公共子串,输出字典序最小的那个 题目分析:一开始看到这个题目的时候我是没有想到暴力的.. ...

  4. POJ 3080 - Blue Jeans

    题意: 求所有串的最长公共子串,若有多个输出字典序最小的 分析: 对第一个串的每一个后缀分别与剩下的所有串进行匹配,求得公共子串 对每一个公共子串,记录下最大值即可. 1 #include <i ...

  5. POJ 3080 Blue Jeans (多个字符串的最长公共序列,暴力比较)

    题意:给出m个字符串,找出其中的最长公共子序列,如果相同长度的有多个,输出按字母排序中的第一个. 思路:数据小,因此枚举第一个字符串的所有子字符串s,再一个个比较,是否为其它字符串的字串.判断是否为字 ...

  6. POJ 3080 Blue Jeans (后缀数组)

    题目大意: 求出这些DNA序列中的最长且字典序最小的公共子串. 思路分析: 二分长度的答案,去height中扫描这个长度是否满足,一旦满足就立即输出.这样就能够保证字典序最小了. #include & ...

  7. 暴力枚举(字符串匹配)-Blue Jeans POJ - 3080

    暴力枚举(字符串匹配)-Blue Jeans POJ - 3080 题目: Genographic项目是IBM与国家地理学会之间的研究合作伙伴关系,该合作伙伴正在分析数十万贡献者的DNA,以绘制地球的 ...

  8. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...

  9. HDU 4763 Theme Section(KMP+枚举公共前后缀)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意: 给你一个字符串s,存在一个 子串E同时出现在前缀.中间.后缀,即EAEBE这种模式 ...

  10. poj 1961 Period(KMP)

    题目链接:http://poj.org/problem?id=1961 题目大意:给出一个长为n的字符串,求到每个字符之前有多少个字串循环次数大于1 方法: kmp ,求出这个字符串的next数组.在 ...

最新文章

  1. ubuntu mysql的穷_Ubuntu安装配置Mysql
  2. WPF以Clickonce方式发布后使用管理员身份运行
  3. 数据库分库分表和带来的唯一ID、分页查询问题的解决
  4. pandas合并groupby_pandas实践之GroupBy()
  5. 推荐40个简单的 jQuery 导航插件和教程【下篇】
  6. ZZULIOJ 1100: 求组合数(函数专题)
  7. 力扣453.最小操作次数使数组元素相等
  8. vc2013控件第一个程序
  9. 前端如何使用mock模拟接口数据
  10. 员工转正申请书_有限公司新员工转正申请书
  11. 2023年全国最新工会考试精选真题及答案51
  12. [芭比公主系列][国英双语]芭比之十二芭蕾舞公主 Barbie in The 12 Dancing Princesses
  13. iOS性能优化-UI卡顿检测
  14. Spire.XLS:一款Excel处理神器
  15. 2022年9月份前端女生工作总结
  16. php k线15分钟 30分钟,15分钟30分钟K线战法
  17. 蓝桥杯省赛 走方格(多种方法)
  18. cxfreeze 打包exe
  19. MFC对话框中嵌入D3D
  20. 【机器学习】DecisionTreeClassifier与红酒数据集

热门文章

  1. 常见input输入框 点击 发光白色外阴影 focus
  2. 【转】【经典算法】——KMP,深入讲解next数组的求解
  3. javascript实现浏览器窗口传递参数
  4. 正则表达式与java String.split()
  5. Deeplabv3+-训练自己的数据集
  6. little w and Sum(思维)
  7. Vue基础知识之vue-resource和axios(三)
  8. 70.Android开发知识点总结
  9. MOSS架构和共享服务(Shared Service)
  10. 卡尔曼滤波和粒子滤波最直白的解释