POJ 3080 - Blue Jeans
题意:
求所有串的最长公共子串,若有多个输出字典序最小的
分析:
对第一个串的每一个后缀分别与剩下的所有串进行匹配,求得公共子串
对每一个公共子串,记录下最大值即可.
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int MAXN = 66; 6 int nxt[MAXN]; 7 void GetNxt(char p[], int m) 8 { 9 int j = 0, k = -1; 10 nxt[0] = -1; 11 while(j < m) 12 { 13 if(k != -1 && p[j] != p[k]) k = nxt[k]; 14 else nxt[++j] = ++k; 15 } 16 } 17 int KMP(char s[], int n, char p[], int m) 18 { 19 int res = 0; 20 for (int i = 0, k = 0; i < n; i++) 21 { 22 while (k > 0 && p[k] != s[i]) k = nxt[k]; 23 if (p[k] == s[i]) k++; 24 res = max(res, k); 25 if (k == m) k = nxt[k]; 26 } 27 return res; 28 } 29 char p[MAXN], s[20][MAXN]; 30 int n, t, len; 31 int ans; 32 char res[MAXN], T[MAXN]; 33 int main() 34 { 35 scanf("%d", &t); 36 while (t--) 37 { 38 ans = 0; 39 scanf("%d", &n); 40 scanf("%s", p); 41 len = strlen(p); 42 for (int i = 1; i < n; i++) scanf("%s", s[i]); 43 44 for (int i = 0; i < len; i++) // 枚举每一个后缀 45 { 46 int tmp = 66; 47 GetNxt(p+i, len-i); 48 for (int j = 1; j < n; j++) 49 tmp = min(tmp, KMP(s[j], len, p+i, len-i)); // 公共匹配的长度 50 51 strncpy(T, p+i, tmp); 52 T[tmp] = '\0'; 53 if (tmp > ans) //记录最大值 54 { 55 ans = tmp; 56 strcpy(res, T); 57 } 58 else if (tmp == ans && strcmp(res, T) > 0) 59 { 60 strcpy(res, T); 61 } 62 } 63 if (ans < 3) puts("no significant commonalities"); 64 else puts(res); 65 } 66 }
转载于:https://www.cnblogs.com/nicetomeetu/p/5877430.html
POJ 3080 - Blue Jeans相关推荐
- POJ 3080 Blue Jeans (KMP)
链接:http://poj.org/problem?id=3080 题目: Description The Genographic Project is a research partnership ...
- POJ 3080 Blue Jeans (多个字符串的最长公共序列,暴力比较)
题意:给出m个字符串,找出其中的最长公共子序列,如果相同长度的有多个,输出按字母排序中的第一个. 思路:数据小,因此枚举第一个字符串的所有子字符串s,再一个个比较,是否为其它字符串的字串.判断是否为字 ...
- POJ - 3080 Blue Jeans(暴力+KMP)
题目链接:点击查看 题目大意:给出n组长度为60的字符串,问这n组中最长的公共连续子串是什么,若有多个不同的最长公共子串,输出字典序最小的那个 题目分析:一开始看到这个题目的时候我是没有想到暴力的.. ...
- poj 3080 Blue Jeans
#include <iostream> //KMP+枚举#include<string>using namespace std;#define len 60char str[1 ...
- 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 ...
- [POJ3080 Blue Jeans]
[题目来源]:South Central USA 2006 [关键字]:字符串 [题目大意]:找出给所有字符串的最长公共字串. //================================== ...
- POJ3080 ZOJ2784 UVALive3628 Blue Jeans题解
代码来源:TYUT_YancyKahn AC的C++语言程序如下: #include <iostream> #include <cstring> #include <cs ...
最新文章
- vue-cli——vue-resource登录注册实例
- 小白的python之路11/3总结
- redis的hash操作在集中式session中的应用
- [转]常用数字处理算法的Verilog实现
- 商品详细信息的代码html_Web前端,你该有的代码规范
- HDU4462-稻草人
- CF1526 D. Kill Anton
- 计算机指令格式_计算机科学组织| 指令格式
- 运维更简单、更智能,让运维人不再 “拼命”
- 区块链安全 - DAO攻击事件解析
- 被替换的项目不是替换值长度的倍数_机器学习中处理缺失值的9种方法
- steam一键授权工具_超实用小工具!一键将PC其它平台的游戏导入Steam
- html切图软件,切图工具/插件介绍
- 树形结构的数据库表设计
- “Unexpected end of JSON input while parsing near···”错误解决方案
- (数位dp) 算法竞赛入门到进阶 书本题集
- 基于高光谱成像技术结合卷积神经网络的马铃薯病害检测
- win7系统自带的录像在哪里 Win7问题步骤记录器教程详解
- 链游系列 Decentraland / MANA 项目玩法解析
- 第12章、类和动态内存分配
热门文章
- ROM存储1/4周期正弦信号构造DDS
- 关于标题的多HTML定制
- html5两条直线,Html5新特性用canvas标签画多条直线附效果截图
- 如何自动升级php数据库,php – 如何在现实世界中“升级”数据库?
- android都图片mat_普通Android码农,该如何逆袭月薪5W的移动端架构师?
- linux编码合适修改_CentOS升级Linux内核备忘录
- java音乐网站源码_Vue + SpringBoot + MyBatis 音乐网站
- php如何把图片铺满,PHP如何裁剪图片成固定大小
- kotlin方法类型_Kotlin类型检查,Kotlin类型铸造
- jdk和jre和jvm区别_JDK,JRE和JVM之间的区别