poj 3080 Blue Jeans kmp+枚举
本题与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+枚举相关推荐
- POJ 3080 Blue Jeans (KMP)
链接:http://poj.org/problem?id=3080 题目: Description The Genographic Project is a research partnership ...
- poj 3080 Blue Jeans
#include <iostream> //KMP+枚举#include<string>using namespace std;#define len 60char str[1 ...
- POJ - 3080 Blue Jeans(暴力+KMP)
题目链接:点击查看 题目大意:给出n组长度为60的字符串,问这n组中最长的公共连续子串是什么,若有多个不同的最长公共子串,输出字典序最小的那个 题目分析:一开始看到这个题目的时候我是没有想到暴力的.. ...
- POJ 3080 - Blue Jeans
题意: 求所有串的最长公共子串,若有多个输出字典序最小的 分析: 对第一个串的每一个后缀分别与剩下的所有串进行匹配,求得公共子串 对每一个公共子串,记录下最大值即可. 1 #include <i ...
- POJ 3080 Blue Jeans (多个字符串的最长公共序列,暴力比较)
题意:给出m个字符串,找出其中的最长公共子序列,如果相同长度的有多个,输出按字母排序中的第一个. 思路:数据小,因此枚举第一个字符串的所有子字符串s,再一个个比较,是否为其它字符串的字串.判断是否为字 ...
- POJ 3080 Blue Jeans (后缀数组)
题目大意: 求出这些DNA序列中的最长且字典序最小的公共子串. 思路分析: 二分长度的答案,去height中扫描这个长度是否满足,一旦满足就立即输出.这样就能够保证字典序最小了. #include & ...
- 暴力枚举(字符串匹配)-Blue Jeans POJ - 3080
暴力枚举(字符串匹配)-Blue Jeans POJ - 3080 题目: Genographic项目是IBM与国家地理学会之间的研究合作伙伴关系,该合作伙伴正在分析数十万贡献者的DNA,以绘制地球的 ...
- POJ 3080 多个串最长公共子序列
求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...
- HDU 4763 Theme Section(KMP+枚举公共前后缀)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意: 给你一个字符串s,存在一个 子串E同时出现在前缀.中间.后缀,即EAEBE这种模式 ...
- poj 1961 Period(KMP)
题目链接:http://poj.org/problem?id=1961 题目大意:给出一个长为n的字符串,求到每个字符之前有多少个字串循环次数大于1 方法: kmp ,求出这个字符串的next数组.在 ...
最新文章
- ubuntu mysql的穷_Ubuntu安装配置Mysql
- WPF以Clickonce方式发布后使用管理员身份运行
- 数据库分库分表和带来的唯一ID、分页查询问题的解决
- pandas合并groupby_pandas实践之GroupBy()
- 推荐40个简单的 jQuery 导航插件和教程【下篇】
- ZZULIOJ 1100: 求组合数(函数专题)
- 力扣453.最小操作次数使数组元素相等
- vc2013控件第一个程序
- 前端如何使用mock模拟接口数据
- 员工转正申请书_有限公司新员工转正申请书
- 2023年全国最新工会考试精选真题及答案51
- [芭比公主系列][国英双语]芭比之十二芭蕾舞公主 Barbie in The 12 Dancing Princesses
- iOS性能优化-UI卡顿检测
- Spire.XLS:一款Excel处理神器
- 2022年9月份前端女生工作总结
- php k线15分钟 30分钟,15分钟30分钟K线战法
- 蓝桥杯省赛 走方格(多种方法)
- cxfreeze 打包exe
- MFC对话框中嵌入D3D
- 【机器学习】DecisionTreeClassifier与红酒数据集