题意:给你一系列字符串,编号为1 - n ,然后让你找一个下标最大的串,在它之前存在一个串不是这个串的子串,如果有则输出这个串的 下标,如果没有则 输出 - 1。

思路:

KMP匹配。一看数据都挺小,直接匹配,结果TTTTTT............到这时,我仍旧没有什么好的想法,就看了看别人的题解,发现别人只是比我多了一个小小的剪枝,就跑的贼快。

多设一个vis数组,标记已经匹配成功的较小串,比如 1: avf  2:avfe   1与2 匹配成功,1是2的子串,所以下次匹配时就不需要在匹配1了,因为如果2匹配成功,1必然也能匹配成功。

所以只需要从小到大枚举就行了。

论剪枝的重要性!!!

AC Code:

#include<iostream>
#include<cstring>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<cmath>
#include<cstdio>
#include<iomanip>
#include<sstream>
#include<algorithm>using namespace std;
#define read(x) scanf("%d",&x)
#define Read(x,y) scanf("%d%d",&x,&y)
#define sRead(x,y,z)  scanf("%d%d%d",&x,&y,&z)
#define gc(x)  scanf(" %c",&x);
#define mmt(x,y)  memset(x,y,sizeof x)
#define write(x) printf("%d\n",x)
#define INF 0x3f3f3f3f
#define ll long long
#define mod  998244353
#define pdd pair<double,double>
const int N = 1000;
const int M=  1e6+5;
int Next[501][2001];
char s[501][2001];
bool vis[2001];
void kmp_pre(int id){int i = 0,j = Next[id][0] = -1;int m = strlen(s[id]);while(i < m){while(j != -1 &&s[id][i] != s[id][j]) j = Next[id][j];if(s[id][++i] == s[id][++j]) Next[id][i] = Next[id][j];else Next[id][i] = j;}
}
bool kmp(int id1,int id2){int i = 0,j = 0;int n = strlen(s[id2]);int m = strlen(s[id1]);while(i < n){while(j!=-1&&s[id2][i] != s[id1][j]) j = Next[id1][j];++i,++j;if(j >= m) return 1;}return 0;
}
int main()
{int T;read(T);for(int p = 1;p <= T;++p){mmt(vis,0);int n;read(n);for(int i = 1;i <= n;++i)  scanf("%s",s[i]),kmp_pre(i);int k = -1;bool r = 1;for(int i = 2;i <= n;++i){for(int j = 1;j < i;++j){if(vis[j]) continue;//剪枝if(kmp(j,i)) vis[j] = 1;else k = i;}}printf("Case #%d: %d\n",p,k);}
}

hdu5510 Bazinga(KMP 剪枝) !!相关推荐

  1. 记2015沈阳区域赛

    前记 基本确定了要去沈阳和上海打区域赛,听说苏大cp也会沈阳,于是我们的最终目标变为了压苏大. 周五 下午一点左右的飞机,本来想要早上赶概率论作业然后交到学校去,结果睡晚了,干脆就早点去了机场,然后大 ...

  2. HDU 5510 Bazinga 暴力匹配加剪枝

    Bazinga Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5510 ...

  3. HDU 5510 Bazinga(kmp)

    题目戳这 题意:给你n个串,让你找到一个串,这个串的前面至少有一个不是它的子串,并且这个串要尽量靠后. 思路:弄两个变量当做指针来使,定义变量名为 l 和 r ,然后线性地往后面扫,如果s[l]不是s ...

  4. 2020.9.9华为笔试记忆:KMP+记忆化搜索+字典树

    2020.9.9华为笔试 当然,出现在我博客中的笔试都不是我自己的笔试(人家也不给我发笔试链接,小声bibi,诶,好像我也没投,hhhahahha 记者:为什么要做笔试? 我:生活无聊了喏,肯定要做啊 ...

  5. 拓展kmp(2020新年第一篇博客 学无止境冲啊)

    拓展kmp算法可解决以下问题,给定两个字符串s1和s2,可以求出s1的extend数组(简记为ex),其中extend[i]表示s1从第i位开始的子串和s2的最大公共前缀长度,举个例子:可以看到ext ...

  6. 数据结构与算法分析(十六)--- 如何设计更高效的字符串匹配算法?(BF + RK + KMP + BMH)

    文章目录 一.Brute Force 匹配算法 二.Rabin–Karp 匹配算法 三.Knuth–Morris–Pratt 匹配算法 四.Boyer-Moore-Horspool 匹配算法 五.字符 ...

  7. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  8. leetcode 028.实现strStr(),即查找重复字符串(KMP算法)

    前言 本题是经典的字符串单模匹配的模型,因此可以使用字符串匹配算法解决,常见的字符串匹配算法包括暴力匹配.Knuth-Morris-Pratt 算法.Boyer-Moore 算法.Sunday 算法等 ...

  9. KMP(Knuth-Morris-Pratt) 字符串查找算法

    1.背景   我接触到这个算法是在力扣的每日一题中(28. 实现 strStr()),这本来只是一个分类为简单的题目.但是却在官方题解中介绍了这个看似十分复杂的算法.   在官方题解中给出了详细的证明 ...

  10. kmp求前缀和后缀的最大重复部分

    hdu 2594 kmp水题 求s1的前缀和s2的后缀重复度的最大值 2013-06-05 11:16 1199人阅读 评论(0) 收藏 举报  分类: KMP(8)  版权声明:本文为博主原创文章, ...

最新文章

  1. 关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named ‘robot‘
  2. 【Flutter】开发 Flutter 包和插件 ( 开发 Dart 插件包 | 发布 Dart 插件包 )
  3. apache常用的配置指令:ServerRoot
  4. C#连接mysql数据库的一个例子和获取本机IP的方法
  5. 命名空间跟作用域是什么关系_乔丹跟科比什么关系?他们是亲密朋友,但并未对外公开...
  6. LeetCode 923. 三数之和的多种可能(双指针)
  7. 程序返回值的数据结构
  8. onedrive不同版本
  9. 尚硅谷大数据之Linux
  10. Realsense D435i 使用
  11. 苹果基带坏了怎么办_「手机维修自学教程」苹果手机的基带逻辑码片读取技巧 保资料搬板...
  12. 5G的遮羞布被撕下了,双十一最畅销的手机竟然是4G手机
  13. git - 1.基础
  14. EMV log 解析
  15. Python爬虫常用库requests、beautifulsoup、selenium、xpath总结
  16. Win10系统邮件添加QQ邮件账户
  17. 霹雳吧啦Wz语义分割学习笔记P3
  18. 以Crotex M3为例讲解stm32芯片内部原理
  19. 设计一可控同步四进制可逆计数器, 其由输入X1, X2控制, 用D触发器和74151及必要的门电路实现
  20. 统计字符串中不同字符类型的个数

热门文章

  1. 开源和免费的gis软件工程索引
  2. java float 输出文本框_关于Java中float数输出时显示问题
  3. Dex.top“50计划”新玩法,能否让行业格局重新洗牌?
  4. MySQL高级部分理论知识细讲
  5. 南郭先生不一样得解读
  6. 为什么一提到苹果就想到乔布斯,蒂姆·库克的事迹你知道多少?
  7. 王者荣耀英雄测试用例
  8. 药方的量化方法笔记(学习与尝试):第二回 第一次 药方的拆解 量化方法的形式的发展 对药的量化分析
  9. 你知道CDN是什么吗?本文带你搞明白CDN
  10. python爬虫抓取链家租房数据