poj-3080(kmp+暴力枚举)
题意:给你多个字符串,问你这几个字符串的最长公共子串是哪个,如果有多个,输出字典序最大的那个,如果最长的公共子串长度小于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+暴力枚举)的更多相关文章
- hdu 1238 Substrings(kmp+暴力枚举)
Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...
- 【poj 3080】Blue Jeans(字符串--KMP+暴力枚举+剪枝)
题意:求n个串的字典序最小的最长公共子串. 解法:枚举第一个串的子串,与剩下的n-1个串KMP匹配,判断是否有这样的公共子串.从大长度开始枚举,找到了就break挺快的.而且KMP的作用就是匹配子串, ...
- poj 3080 kmp求解多个字符串的最长公共字串,(数据小,有点小暴力 16ms)
Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14113 Accepted: 6260 Descr ...
- POJ 2912 - Rochambeau - [暴力枚举+带权并查集]
题目链接:http://poj.org/problem?id=2912 Time Limit: 5000MS Memory Limit: 65536K Description N children a ...
- 字符串截取模板 && POJ 3450、3080 ( 暴力枚举子串 && KMP匹配 )
//截取字符串 ch 的 st~en 这一段子串返回子串的首地址 //注意用完需要根据需要最后free()掉 char* substring(char* ch,int st,int en) { ; c ...
- POJ 3080 Blue Jeans (字符串处理暴力枚举)
Blue Jeans Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21078 Accepted: ...
- hdu_2328_Corporate Identity(暴力枚举子串+KMP)
题目链接:hdu_2328_Corporate Identity 题意: 给你n个串,让你找这n个串的最大公共子串 题解: 串比较小,暴力枚举第一个的子串,然后KMP判断是否可行 #include&l ...
- POJ - 1426 暴力枚举+同余模定理 [kuangbin带你飞]专题一
完全想不到啊,同余模定理没学过啊,想起上学期期末考试我问好多同学'≡'这个符号什么意思,都说不知道,你们不是上了离散可的吗?不过看了别人的解法我现在会了,同余模定理介绍及运用点这里点击打开链接 简单说 ...
- hdu-2328(暴力枚举+kmp)
题意:给你n个字符串,问你这n个串的最长公共子串 解题思路:暴力枚举任意一个字符串的所有子串,然后暴力匹配,和hdu1238差不多的思路吧,这里用string解决的: 代码: #include< ...
随机推荐
- Git-命令行-使用 Tag 标记你的代码
前言 正文开始之前,我想我们需要弄明白几个问题: 1.tag 是什么? 2.使用tag 的好处? 3.tag 和 branch 的区别以及使用场景? tag 是什么? tag , 翻译过来是标签的意思 ...
- Python从菜鸟到高手(7):字符串
1. 单引号字符串和转义符 字符串与数字一样,都是值,可以直接使用,在Python控制台中直接输入字符串,如"Hello World",会按原样输出该字符串,只不过用单引号括了 ...
- storm自定义分组与Hbase预分区结合节省内存消耗
Hbas预分区 在系统中向hbase中插入数据时,常常通过设置region的预分区来防止大数据量插入的热点问题,提高数据插入的效率,同时可以减少当数据猛增时由于Region split带来的资源消耗. ...
- Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)
刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误. nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据. 按字符存储 ...
- H5 marquee标签
39-marquee标签 内容 属性: direction: 设置滚动方向 left/right/up/down scrollamount: 设置滚动速度, 值越大就越快 loop: 设置滚动次数, ...
- img :src=“” url()
<img :src="logoImg"> this.logoImg='/static/images/'+adminUser.Logo; v-bind:style=&qu ...
- Selenium库
'''自动化测试工具,支持多种浏览器.爬虫中主要用来解决JavaScrip渲染的问题.''''''基本使用'''from selenium import webdriverfrom selenium. ...
- urllib库
python内置的最基本的HTTP请求库,有以下四个模块: urllib.request 请求模块 urllib.error 异常处理模块 urllib.parse url解析模块 urllib.ro ...
- Win10系统如何安装Linux Mint
导读 随着windows10系统免费升级期限的靠近,越来越多朋友都将自己的电脑系统升级到了win10正式版.今天,小编就要在这里为大家分享Windows10系统安装Linux Mint的方法,希望能够 ...
- JDK8-新特性-附demo
import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Base64; impor ...