HDU 5510 Bazinga(kmp)
来源:互联网 发布:80端口入侵教程 编辑:程序博客网 时间:2024/06/04 19:34
http://acm.hdu.edu.cn/showproblem.php?pid=5510
题目大意:
S1~Sn n个串 问满足存在一个Sj不是Si子串(0<j<i,0<i<n) 的最大i是多少
分析:
kmp暴力 求最大的i嘛 从后向前找 找到一个不匹配的直接退出就好 小优化 相邻两个串如果短的串是长串的子串 那么在匹配是短串就不再需要匹配了
AC代码:
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <vector>#include <stack>#include <queue>#include <map>#include <set>#include<list>#include <bitset>#include <climits>#include <algorithm>#define gcd(a,b) __gcd(a,b)#define mset(a,n) memset(a,n,sizeof(a))#define FINfreopen("input.txt","r",stdin)#define FOUT freopen("output.txt","w",stdout)typedef long long LL;const LL mod=1e9+7;const int INF=0x3f3f3f3f;const double PI=acos(-1.0);using namespace std;int Next[1000010];char str[505][2005];int vis[505];void get_Next(char *str){ int n=strlen(str); int j=-1; Next[0]=-1; for (int i=1;i<n;i++){ while (j>=0&&str[i]!=str[j+1]) j=Next[j]; if (str[i]==str[j+1]) j++; Next[i]=j; }}int KMP(char *str2,char *str1){ get_Next(str2); int len1=strlen(str1); int len2=strlen(str2); int j=-1; for (int i=0;i<len1;i++){ while (j>=0&&str1[i]!=str2[j+1]) j=Next[j]; if (str1[i]==str2[j+1]) j++; if (j==len2-1) return 1; } return 0;}int main(){ int t; scanf ("%d",&t); int cc=1; while (t--){ mset(vis,0); int n; scanf ("%d",&n); for (int i=0;i<n;i++) scanf ("%s",str[i]); for (int i=1;i<n;i++) if (KMP(str[i-1],str[i])) vis[i-1]=1; int flag=0; for (int i=n-1;i>=0;i--){ for (int j=i-1;j>=0;j--){ if (vis[j]) continue; int len=KMP(str[j],str[i]); if (!len){ printf ("Case #%d: %d\n",cc++,i+1); flag=1; break; } } if (flag) break; } if (!flag) printf ("Case #%d: %d\n",cc++,-1); }return 0;}
阅读全文
0 0
- hdu 5510 -Bazinga(kmp)
- hdu 5510 Bazinga(kmp)
- HDU 5510 Bazinga 【kmp】
- HDU 5510 Bazinga(KMP)
- HDU 5510 Bazinga(kmp)
- HDU 5510 Bazinga (KMP)
- HDU 5510 Bazinga(KMP)
- HDU-5510 Bazinga(KMP)
- HDU 5510 Bazinga (KMP)
- hdu 5510 Bazinga(KMP+剪枝)
- HDU-5510-Bazinga【2015沈阳赛区】【KMP】
- Hdu 5510 Bazinga(KMP+尺取法)
- hdu 5510 Bazinga【KMP+暴力剪枝】
- HDU 5510 Bazinga (kmp + 小剪枝)
- hdu 5510 Bazinga 剪枝+find()/strstr()/KMP
- HDU 5510 Bazinga 双指针+KMP.
- hdu 5510Bazinga(kmp+思维)
- HDU 5510(ACM 2015 沈阳)Bazinga [KMP]
- 虚拟机下创建共享文件夹时找不到设置的文件夹
- bzoj1196 [HNOI2006]公路修建问题 二分
- 深度学习笔记(1)------linux Ubuntu 14.04+Anaconda2+opencv 3.2.0+caffe-master配置
- NYOJ 746 整数划分(四)(区间dp)
- 我的Spring学习记录(四)
- HDU 5510 Bazinga(kmp)
- linux 查看服务器序列号(S/N)
- 折腾了半天,发现在lightswitch下有个解决FTP等功能的好方法。
- LeedCode Add Two Numbers
- HDU 1698-Just a Hook
- POJ 2154 Color(polya定理+欧拉函数)
- leetcode 334. Increasing Triplet Subsequence 自增序列3个元素
- GYM 100801J Journey to the “The World's Start”【二分+Dp+单调队列】
- 如何判断2条线段是否相交(编程实现)?