题意:给你多个字符串,问你这几个字符串的最长公共子串是哪个,如果有多个,输出字典序最大的那个,如果最长的公共子串长度小于3,输出一个奇怪的东西;

解题思路:首先看数据,数据不大,开始简单快乐的暴力之路,因为是公共的子串,所以我们随便找一个原串,把它的子串全部循环一遍,然后所有的子串都去和剩余的原串跑一遍kmp,如果匹配没啥问题,那么这个子串是剩余所有原串的公共子串,然后更新答案;

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
char a[15][100];
char t[100];
char s[100];
char char_ans[100];
int next[100];
int slen,tlen;
bool bj(char x[],char y[],int w)
{
for(int i=0;i<w;i++)
{
if(x[i]==y[i])
continue;
if(x[i]>y[i])
{
return true;
}
}
return false;
}
void get_next()
{
int j=0,k=-1;next[0]=-1;
while(j<tlen)
{
if(k==-1||t[k]==t[j])
next[++j]=++k;
else
k=next[k];
}
}
int kmp_pos()
{
int i=0,j=0;
get_next();
while(i<slen&&j<tlen)
{
if(j==-1||s[i]==t[j])
{
i++;j++;
}
else
j=next[j];
}
if(j==tlen)
return i-tlen;
else
return -1;
}
int main()
{
int tt,n;
int ans=-1;
int cnt;
int flag;
scanf("%d\n",&tt);
while(tt--)
{
ans=-1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]);
}
for(int i=0;i<=59;i++)//从位置i开始
{
cnt=0;tlen=0;
for(int j=i;j<=59;j++)//到位置j结束
{
slen=60;
t[cnt]=a[1][j];tlen++;cnt++;//t串的赋值;
flag=0;
for(int k=2;k<=n;k++)//循环n个串找字串;
{
for(int l=0;l<60;l++)//s串的赋值,我的kmp的写法习惯无参数,所以t串,s串都要自己赋值;
s[l]=a[k][l];
int x=kmp_pos();
if(x==-1)
flag=1;
}
if(flag==0)//如果没有啥子问题
{
if(tlen==ans)//更新答案
{
if(bj(t,char_ans,tlen))
{
for(int k=0;k<tlen;k++)
char_ans[k]=t[k];
}
}
else if(tlen>ans)//更新答案
{
ans=tlen;
for(int k=0;k<tlen;k++)
char_ans[k]=t[k];
}
}
}
}
if(ans<3)
printf("no significant commonalities\n");
else
{
for(int i=0;i<ans;i++)
printf("%c",char_ans[i]);
printf("\n");
}
}
}

  

poj-3080(kmp+暴力枚举)的更多相关文章

  1. hdu 1238 Substrings(kmp+暴力枚举)

    Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...

  2. 【poj 3080】Blue Jeans(字符串--KMP+暴力枚举+剪枝)

    题意:求n个串的字典序最小的最长公共子串. 解法:枚举第一个串的子串,与剩下的n-1个串KMP匹配,判断是否有这样的公共子串.从大长度开始枚举,找到了就break挺快的.而且KMP的作用就是匹配子串, ...

  3. poj 3080 kmp求解多个字符串的最长公共字串,(数据小,有点小暴力 16ms)

    Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14113   Accepted: 6260 Descr ...

  4. POJ 2912 - Rochambeau - [暴力枚举+带权并查集]

    题目链接:http://poj.org/problem?id=2912 Time Limit: 5000MS Memory Limit: 65536K Description N children a ...

  5. 字符串截取模板 && POJ 3450、3080 ( 暴力枚举子串 && KMP匹配 )

    //截取字符串 ch 的 st~en 这一段子串返回子串的首地址 //注意用完需要根据需要最后free()掉 char* substring(char* ch,int st,int en) { ; c ...

  6. POJ 3080 Blue Jeans (字符串处理暴力枚举)

    Blue Jeans  Time Limit: 1000MS        Memory Limit: 65536K Total Submissions: 21078        Accepted: ...

  7. hdu_2328_Corporate Identity(暴力枚举子串+KMP)

    题目链接:hdu_2328_Corporate Identity 题意: 给你n个串,让你找这n个串的最大公共子串 题解: 串比较小,暴力枚举第一个的子串,然后KMP判断是否可行 #include&l ...

  8. POJ - 1426 暴力枚举+同余模定理 [kuangbin带你飞]专题一

    完全想不到啊,同余模定理没学过啊,想起上学期期末考试我问好多同学'≡'这个符号什么意思,都说不知道,你们不是上了离散可的吗?不过看了别人的解法我现在会了,同余模定理介绍及运用点这里点击打开链接 简单说 ...

  9. hdu-2328(暴力枚举+kmp)

    题意:给你n个字符串,问你这n个串的最长公共子串 解题思路:暴力枚举任意一个字符串的所有子串,然后暴力匹配,和hdu1238差不多的思路吧,这里用string解决的: 代码: #include< ...

随机推荐

  1. Generative Adversarial Nets[Vanilla]

    引言中已经较为详细的介绍了GAN的理论基础和模型本身的原理.这里主要是研读Goodfellow的第一篇GAN论文. 0. 对抗网络 如引言中所述,对抗网络其实就是一个零和游戏中的2人最小最大游戏,主要 ...

  2. Windows OpenSSH 基本用法

    笔者在前文<Windows 支持 OpenSSH 了!>中介绍了 Windows 对 OpenSSH 支持的基本内容,本文在前文的基础上介绍一些 OpenSSH Server 的配置和常见 ...

  3. 我的微信小程序第三篇(app.json)

    前言 端午节回家了,所以好多天没有更新,只想说还是待在家里舒服呀,妈妈各种做好吃的,小侄子侄女各种粘着我在室外玩,导致我三天下来不仅胖了一圈,还黑了一圈,上班第一天有同事就说我晒黑了,哭~~~,为了防 ...

  4. A4纸尺寸 web打印报告

    A4纸对应的像素尺寸: <style> @media print { .Noprn{ display:none;} .print-hidden { display: none !impor ...

  5. Linux 下面 Sqlserver 2017 的简单安装

    1. 公司网络太烂 yum 在线安装失败 2. 解决方法 找微软的官网 百度网盘 离线下载rpm包. https://packages.microsoft.com/rhel/7/mssql-serve ...

  6. UTC时间、GMT时间、本地时间、Unix时间戳

    引用: https://blog.csdn.net/u012102306/article/details/51538574 https://blog.csdn.net/foxir/article/de ...

  7. Oracle的数据类型详述

    数据类型 (1)字符型 CHAR: 定长最多(2000字节)特定情况下用 VARCHAR2:可变长度的字符串最多(4000字节) LONG:大文本类型最多(2个G) (2)数值型 NUMBER:可以是 ...

  8. jq简单仿上传文件

    html: <div> <input id="lefile" type="file" style="display:none&quo ...

  9. vue cli3 vue.config.js 配置详情

    module.exports = {   // 基本路径   baseUrl: process.env.NODE_ENV === 'production'     ? '/'     : '/',   ...

  10. cordova微信支付回调App闪退

    这是cordova版本太高,不兼容这个插件所导致的.解决方案是修改$your_project/plugins/cordova-plugin-wechat/scripts/android-install ...