题目大意:有M个串,每个串的长度都是60,查找这M个串的最长公共子串(连续的),长度不能小于3,如果同等长度的有多个输出字典序最小的那个。
 
分析:因为串不多,而且比较短,所致直接暴力枚举的第一个串的所有子串,比较暴力的做法,如果串的长度大一些就没法玩了。
代码如下:
====================================================================================
#include<stdio.h>
#include<string.h>const int MAXN = 107;
const int oo = 1e9+7;char s[MAXN][MAXN];
int next[MAXN];void GetNext(char s[])
{int i=0, j=-1, N=strlen(s);next[0] = -1;while(i < N){if(j==-1 || s[i]==s[j])next[++i] = ++j;elsej = next[j];}
}
bool KMP(char a[], char s[])
{int i=0, j=0;int Na=strlen(a), Ns = strlen(s);while(i < Na){while(j==-1 || (a[i]==s[j] && i<Na) )i++, j++;if(j == Ns)return true;j = next[j];}return false;
}int main()
{int T;scanf("%d", &T);while(T--){int i, j, len, M, MaxLen=60;char ans[MAXN] = "Z";scanf("%d", &M);for(i=0; i<M; i++)scanf("%s", s[i]);for(len=60; len>=3; len--)for(i=0; i<=MaxLen-len; i++){///枚举第一个串的所有子串char b[MAXN]={0};strncpy(b, s[0]+i, len);GetNext(b);for(j=1; j<M; j++){if(KMP(s[j], b) == false)break;}if(j==M && strcmp(ans, b) > 0)strcpy(ans, b);if(ans[0] != 'Z' && i==MaxLen-len)i=100, len = 0;///跳出循环
        }if(ans[0] == 'Z')printf("no significant commonalities\n");elseprintf("%s\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/liuxin13/p/4731815.html

Blue Jeans - POJ 3080(多串的共同子串)相关推荐

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

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

  2. POJ 3080 Blue Jeans (KMP)

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

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

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

  4. poj 3080 Blue Jeans

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

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

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

  6. POJ 3080 - Blue Jeans

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

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

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

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

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

  9. [POJ3080 Blue Jeans]

    [题目来源]:South Central USA 2006 [关键字]:字符串 [题目大意]:找出给所有字符串的最长公共字串. //================================== ...

  10. POJ3080 ZOJ2784 UVALive3628 Blue Jeans题解

    代码来源:TYUT_YancyKahn AC的C++语言程序如下: #include <iostream> #include <cstring> #include <cs ...

最新文章

  1. AJAX俺也不会,是真的,不过,以后就会了
  2. 2015年绿盟面试题
  3. Android Studio 开发安卓软件时下载的工程项目 Sync with gradle 失败
  4. Oracle Database 20c 十大新特性一览
  5. Wazuh--一个完善的开源EDR产品
  6. Scala是多范式编程语言
  7. 数百GitHub私有代码库被黑客清空:不交赎金就公开源码!
  8. mysql 逻辑备份工具_MySQL逻辑备份工具-mydumper
  9. 乐优商城遇到的坑(四)之前台门户系统之Search.html
  10. 让 Alfred 支持拼音
  11. 自然语言处理NLP星空智能对话机器人系列:GavinNLP星空对话机器人Transformer课程片段1到片段4
  12. Base64 在线编码解码
  13. MPB:中科院南土所褚海燕组-结构方程模型在土壤微生态中的应用
  14. 抢购茅台,618只能用这种方法
  15. 没有 RunInstallerAttribute.Yes 的公共安装程序
  16. 深入理解PHP中的ob_flush和flush的区别
  17. Qt6.0+vs2019环境配置
  18. 2021ICPC沈阳游记及2021年度总结
  19. javaWeb项目不报错但网页报500错误
  20. “看到同事 2 万块的笔记本,我认输了”:会说话,才是码农该有的自我修养...

热门文章

  1. java什么是适配器类?作用是什么?_浅谈Java适配器模式
  2. Windows核心编程_修改其它进程里的内存值+示例:修改游戏分数
  3. 利用双向注意流进行机器理解
  4. c++中两个头文件定义同名类的解决办法
  5. html文件执行php语句
  6. Asp.net系列--基础篇(二)
  7. 家庭记账本开发进度6
  8. 安卓apk的编译与反编译
  9. 用lua实现ByteArray和ByteArrayVarint
  10. Algo: Basic