题目链接:点击查看

题目大意:给出n组长度为60的字符串,问这n组中最长的公共连续子串是什么,若有多个不同的最长公共子串,输出字典序最小的那个

题目分析:一开始看到这个题目的时候我是没有想到暴力的。。加上昨天看了AC自动机的定义之后,一度怀疑这是不是个AC自动机的题目,所以就开启自暴自弃模式,正准备打开百度想借着这个题目去学学AC自动机来着,但打开一看发现这是个暴力+KMP的题目,暴力的话我们可以通过第一个字符串,枚举所有长度大于等于3的子串,其实自己算一下发现时间复杂度并不是很大,枚举的话大概是(60/3)+(60/4)+(60/5)……+(60/60)=20+15+12……+1,这么一算,我们直接放缩成20*60=1200,emmm,暴力枚举也只有1e3种情况,当然实际的话肯定连1e3都到不了,那么在枚举之后只需要判断后面的n-1个字符串中是否含有该子串即可,用KMP就能以至多(60*60)的时间复杂度判断每一个子串,那么总的时间复杂度也就是1e3*1e3*10,大概也才1e7多一丢丢,还算是比较小的,还有一个就是string类中find函数的实现好像就是KMP,然后我就偷懒没学KMP,直接用find函数过的这个题。。

不得不承认,cin加速外挂真的好用

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e6+100;int n;string s[15];bool check(string target)
{for(int i=2;i<=n;i++)if(s[i].find(target)==string::npos)return false;return true;
}int main()
{
//  freopen("input.txt","r",stdin);ios::sync_with_stdio(false);int w;cin>>w;while(w--){   cin>>n;for(int i=1;i<=n;i++)cin>>s[i];bool flag=true;for(int len=60;len>=3;len--){string ans;for(int i=0;i+len<=60;i++){string temp=s[1].substr(i,len);if(check(temp))if(ans.empty()||ans>temp)ans=temp;}if(ans.size()){flag=false;cout<<ans<<endl;break;}}if(flag)cout<<"no significant commonalities"<<endl;}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 (多个字符串的最长公共序列,暴力比较)

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

  3. poj 3080 Blue Jeans

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

  4. POJ 3080 - Blue Jeans

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

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

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

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

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

  7. poj 3080-Blue Jeans(暴力KMP)

    传送门: poj 3080 题意: 给出一系列长度为60的字符串,让求出它们的最大的公共子序列 题解: 1.既然是公共子序列,那么在其中一个数据里面可能会有一个子串是满足条件的,那么我们可以将其中的一 ...

  8. hdu2087 剪花布条 暴力/KMP

    在字符串中不可重叠地寻找子串数量,暴力/KMP 1 #include<stdio.h> 2 #include<string.h> 3 4 int main(){ 5 char ...

  9. POJ 3461 字符串匹配(KMP / 哈希(有推导))

    文章目录 1. 题目 1.1 题目链接 1.2 题目大意 2. Accepted代码 2.1 KMP解法 2.2 哈希法(有推导过程) 1. 题目 1.1 题目链接 http://poj.org/pr ...

最新文章

  1. Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
  2. 一款比较实用齐全的jQuery 表单验证插件
  3. PCIe知识学习 (转载)
  4. SGML与HTML、XML
  5. 2 Redis基本知识
  6. Win7远程桌面不能连接的解决方案
  7. 计算机科学与编程基础,国外经典教材·计算机科学与技术:Oracle 10g编程基础
  8. PHP中获取当前页面的完整URL
  9. SAP cloud platform + 504 gateway time out Cloud connector
  10. c语言猜数字游戏新建,C语言编程 如何构建一个简单的猜数字小游戏
  11. c语言二级考试基础知识,2018年计算机二级考试《C语言》考点:C语言基础知识...
  12. 确认过眼神,你是要来百度AI开发者实战营深圳站的人
  13. IAR FOR STM8 学习笔记 固件库 GPIO
  14. dreamweaver php代码提示框,PHP 5.4中的Dreamweaver CS5代码提示和语法错误
  15. Linux中级之lvs三个模式的图像补充(nat,dr,tun)
  16. 超酷!极通EWEBS竟然不需微软终端服务支持
  17. 人艰不拆——记在工作一个半月之后
  18. 【BZOJ2794】[Poi2012]Cloakroom 离线+背包
  19. 2022蓝帽杯初赛部分wp
  20. python爬虫可以爬哪些网站-网络爬虫都能干什么?有哪些网站的数据可以爬取?...

热门文章

  1. 给用户权限数据添加缓存
  2. MyBatis 与Spring 整合分析
  3. 基于Guava API 轻松落地观察者模式
  4. 一个客户端对应一个线程
  5. 分布式架构的NoSQL
  6. 读写锁的由奢入俭“易”
  7. 数据验证和JSR303
  8. SpringBoot的配置文件-通过@ConfigurationProperties映射数据
  9. 外观模式coding
  10. linux网络保存退出,linux编辑文件后如何保存退出