话说这道题我真是无限超时啊!!!超时了无数次,最后优化了一上午,发现3点,终于过了725ms!!!!!
#include<iostream>
using namespace std;
#define max 5010
int next[205];
void prekmp(char aa[])
{
int j=-1;
next[0]=-1;
int len=strlen(aa);
for(int i=1;i<len;i++)
{
while(j>=0&&aa[i]!=aa[j+1])
j=next[j];
if(aa[i]==aa[j+1])
j++;
next[i]=j;
}
}
int kmp(char ss[],char a[])
{
int len=strlen(a);
int lens=strlen(ss);
int j=-1;
for(int i=0;i<len;i++)
{
while(j>=0&&ss[j+1]!=a[i])
j=next[j];
if(ss[j+1]==a[i])
j++;
if(j==lens-1)
return 1;
}
return 0;
}
int main()
{
char a[max][250];
char ta[max],tb[max];
int t,n;
char tc[max];
while(scanf("%d",&n),n)
{
int temp=1;
int len=0x7FFFFFFF;
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]);
int tlen=strlen(a[i]);
if(tlen<len)//选出最小的,优化1
{
temp=i;
len=tlen;
}
}
int sign=0,sign1=0;
int i;
for( i=len;i>=1;i--)
{
for(int k=0;k<200;k++)
tc[k]='z';
tc[200]='\0';
for(int j=0;j+i-1<len;j++)
{
int cou=0;
for(int k=j;k<=j+i-1;k++)
ta[cou++]=a[temp][k];
ta[cou]='\0';
cou=0;
prekmp(ta);//这个我已开始放在kmp里了,发现很浪费时间啊,优化2
for(int k=1;k<=n;k++)
{
if(k!=temp)
{
if(kmp(ta,a[k]))
{
cou++;
}
else
break;//这个优化很重要啊 优化3
}
}
if(cou==n-2+1)
{
sign=1;
sign1=1;
if(strcmp(ta,tc)<0)
strcpy(tc,ta);
}
}
if(sign==1)
{
printf("%s\n",tc);
break;
}
}
if(sign1==0)
printf("IDENTITY LOST\n");
}
return 0;
}

poj 3450 Corporate Identity 枚举+kmp,话说这家伙给我一顿超时啊!!!!相关推荐

  1. POJ - 3450 Corporate Identity(二分+后缀数组)

    题目链接:点击查看 题目大意:给出n个字符串,求出n个字符串中最长的公共子串,如果没有,输出IDENTITY LOST 题目分析:可以直接用二分+后缀数组来做,先将n个字符串连接起来,中间用一个不同的 ...

  2. POJ - 3450

    题目链接:http://poj.org/problem?id=3450 Corporate Identity Time Limit: 3000MS   Memory Limit: 65536K Tot ...

  3. hdu 2328 Corporate Identity(KMP)

    题目链接:hdu 2328 Corporate Identity 题目大意:给出若干个串,求最长公共子串. 解题思路:和poj 3080一样的做法. #include <stdio.h> ...

  4. POJ3450 Corporate Identity —— 后缀数组 最长公共子序列

    题目链接:https://vjudge.net/problem/POJ-3450 Corporate Identity Time Limit: 3000MS   Memory Limit: 65536 ...

  5. M - Corporate Identity(多组字符串匹配问题)

    题目描述 Beside other services, ACM helps companies to clearly state their "corporate identity" ...

  6. HDU 2328 Corporate Identity

    寻找多个字符串中的最长公共子串并输出. 先枚举第一个或者是最短的字符串的所有子串,然后一个一个用KMP匹配就好. 枚举的姿势够好应该不会超时 #include <cstdio> #incl ...

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

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

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

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

  9. POJ 1753 位运算+枚举

    题意: 给出4*4的棋盘,只有黑棋和白棋,问你最少几步可以使棋子的颜色一样. 游戏规则是:如果翻动一个棋子,则该棋子上下左右的棋子也会翻一面,棋子正反面颜色相反. 思路: 都是暴搜枚举. 第一种方法: ...

  10. poj 3369 Grocery store 枚举

    题意: 求a,b,c,d满足a+b+c+d==a*b*c*d<=20 a,b,c,d要求的精度是小数点后2位. 分析: 本地打表后可以适当减小枚举范围,否则超时. 代码: //poj 3369 ...

最新文章

  1. 不断审视自己,做一个长期主义者
  2. 判断Oracle中某个字段是否含有数字
  3. python 队列 一次取多个_Queue 队列模块-Python成为专业人士笔记
  4. 【转载】OI生涯结束……在逸夫楼那些的日子里
  5. python文本文档_python 文本文件操作
  6. python之__name__
  7. 95-140-108-源码-transform-算子process
  8. ASP.NET MVC 5 学习教程:修改视图和布局页
  9. 解决 Error L6915E 问题
  10. 小白 C 入门并发疯学习路线(书单)
  11. 【Gym - 101234G】Dreamoon and NightMarket 【子集中第K大元素】
  12. python爬贴吧回复内容_Python爬虫_获取贴吧内容
  13. 解决conda install pkgs found conflict问题
  14. python作者的诗_《全唐诗》Python文本分析
  15. 【指针】编写并测试一个函数larger_of(),该函数把两个double类型变量的值替 换为较大的值。例如, larger_of(x, y)会把x和y中较大的值重新赋给两个变 量。
  16. 电脑端采集手机视音频并同步
  17. 测试开发常问面试题整理-----网络篇
  18. Oracle分区简介
  19. 参加计算机社团的英语作文,参加社团的英语作文短文欣赏
  20. 游戏建模三大软件:3Dmax、Maya、zbrush 应该如何学才好?

热门文章

  1. VML 编程之--------《VML极道教程》原著:沐缘华
  2. ORB-SLAM2双目开源框架 (4) LoopClosing解析
  3. Lua 函数参数 默认实参
  4. 原来体检报告是这么看的,赶紧收藏!
  5. ssh 认证指定端口
  6. 基于jQuery带标题的图片3D切换焦点图
  7. 用异常来处理错误----第二节 异常管理的优势
  8. URI 、URL 和 URN
  9. MFC单文档多视图程序设计与Splitter拆分窗口
  10. 使用 nginx 的 stream模块的TCP 转发实现内网SSH